資料庫索引對業務速度影響有多大?

  • 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類產品更是如此,掌握一些必要的技能將更有信心與客戶進行能落地的業務交流。

索引對於物聯網應用的數據檢索非常重要,在上億條數據中進行數據的操作,如果沒有索引的幫助,很難想像,結果什麼時候能呈現出來!