日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql更新数据索引慢_mysql添加索引,查询反而变慢

發布時間:2024/9/3 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql更新数据索引慢_mysql添加索引,查询反而变慢 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

依照樓主的數據,我也造了400萬數據:

mysql> select * from index_test limit 5;

id1

id2

11111

11111

22222

22222

11111

11111

22222

22222

11111

11111

id1創建索引

執行確實是id2謂詞條件比較快:

mysql> select * from index_test where id1=11111;

2097152 rows in set (3.00 sec)

mysql> select * from index_test where id2=11111;

2097152 rows in set (2.32 sec)

id1的profile是這樣的:

+----------------------+----------+

| Status | Duration |

+----------------------+----------+

| starting | 0.000080 |

| checking permissions | 0.000014 |

| Opening tables | 0.000024 |

| init | 0.000033 |

| System lock | 0.000015 |

| optimizing | 0.000018 |

| statistics | 0.035408 |

| preparing | 0.000033 |

| executing | 0.000007 |

| Sending data | 2.963681 |

| end | 0.000021 |

| query end | 0.000015 |

| closing tables | 0.000020 |

| freeing items | 0.003474 |

| logging slow query | 0.000117 |

| cleaning up | 0.000072 |

+----------------------+----------+

id2的profile是這樣的:

Status

Duration

starting

0.000074

checking permissions

0.000012

Opening tables

0.000025

init

0.000032

System lock

0.000014

optimizing

0.000018

statistics

0.000025

preparing

0.000019

executing

0.000006

Sending data

2.318096

end

0.000020

query end

0.000034

closing tables

0.000022

freeing items

0.004327

logging slow query

0.000093

cleaning up

0.000060

可以看到id1耗時相對顯著的是statistics,Sending data,主要集中在Sending data。

Sending data

The thread is reading and processing rows for a SELECT statement, and sending data to the client。

也就是說,id1=11111比id2=11111花費更多的時間在數據讀取上。而id1上的是二級索引,用到該索引還有一個回表的花銷,在這種數據基數小,索引的選擇性就太差,這種情況不應該使用索引。

如果非要使用索引,就要避免回表,創建覆蓋索引。

alter table index add index com_idx(id1,id2);

測試結果就可以看到id1=11111比id2=11111快了:

mysql> select * from index_test where id1=11111;

2097152 rows in set (1.71 sec)

mysql> select * from index_test where id2=11111;

2097152 rows in set (2.57 sec)

對應profile如下:

id1=11111

Status

Duration

starting

0.000149

checking permissions

0.000084

Opening tables

0.000032

init

0.000026

System lock

0.000013

optimizing

0.000013

statistics

0.000198

preparing

0.000019

executing

0.000006

Sending data

1.710508

end

0.000024

query end

0.000015

closing tables

0.000019

freeing items

0.003275

logging slow query

0.000068

cleaning up

0.000025

id2=11111

Status

Duration

starting

0.000066

checking permissions

0.000012

Opening tables

0.000020

init

0.000024

System lock

0.000011

optimizing

0.000013

statistics

0.000021

preparing

0.000015

executing

0.000006

Sending data

2.566770

end

0.000025

query end

0.000077

closing tables

0.000034

freeing items

0.004227

logging slow query

0.000093

cleaning up

0.000018

總結

以上是生活随笔為你收集整理的mysql更新数据索引慢_mysql添加索引,查询反而变慢的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。