資料庫索引對業務速度影響有多大?
- 2019 年 11 月 28 日
- 筆記
某採用雲資料庫的網站用戶反映業務訪問速度很慢,查詢一條資料庫的數據時間很長,懷疑是雲資料庫的性能問題,為此引出了今天的討論課題。
一、問題判斷及處理
經過與用戶的交流,該MySQL雲資料庫的單表目前數據量達到了超100W條,而該表並未啟用索引功能,查詢某數據的時間為6.32秒。

我們協助用戶對數據表進行索引設計後,查詢同樣數據的時間達到了ms毫秒級。

二、資料庫索引的好處
1、大大加快數據的查詢數據,這是最主要的原因。
2、在使用group分組或desc排序子句進行數據查詢時,顯著減少時間。
三、資料庫索引的不利
1、佔用磁碟空間。得到了查詢速度,犧牲了磁碟空間。創建索引後,將為某列建索引,並將佔用額外空間。
2、影響數據操作效率。insert、delete、update語句操作時,每次對索引列進行修改操作,均會同步修改索引文件,這將降低數據的維護速度。
3、創建、數據索引也將耗費時間。該時間隨著數據量的增長所耗費的時間也會增加。如下圖,為100W的資料庫創建單列索引,用時12秒。

四、資料庫索引的設計原則
1、索引並非越多越好。每增加一個索引列,就多佔用磁碟,並影響insert、update語句性能。
2、避免對經常更新的表進過多的索引,索引中的列儘可能少。
3、數據量小的表最好不用索引。
4、在不同值較多的列建立索引。如性別列,只有「男」、「女」,沒有必要建立索引。
五、建立索引實戰測試
1、創建一個帶索引的數據表
以下數據表,name帶索引
mysql> create table t5 (
-> id int(11) not null,
-> name char(5) not null,
-> index(name));
Query OK, 0 rows affected (0.02 sec)
2、檢查索引是否生效
以索引列為查詢條件,索引生效
mysql> explain select * from t5 where name='mx' G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t5
partitions: NULL
type: ref
possible_keys: name
key: name
key_len: 5
ref: const
rows: 1
filtered: 100.00
Extra: NULL
1 row in set, 1 warning (0.00 sec)
六、小結
服務商提供雲業務後,與用戶的故障邊界越來越模糊,對於paas類產品更是如此,掌握一些必要的技能將更有信心與客戶進行能落地的業務交流。
索引對於物聯網應用的數據檢索非常重要,在上億條數據中進行數據的操作,如果沒有索引的幫助,很難想像,結果什麼時候能呈現出來!