索引
索引是為了方便查找我們所需要的數據。
mysql支持的索引數據類型
B-Tree索引的特點
B-Tree索引以B+Tree(樹)的結構存儲數據。
B-Tree索引能夠加快數據的查詢速度;
B-Tree更適合進行范圍查找;
在什么情況下可以用到B樹索引
全值匹配的查詢;如:order_sn=’987654321’;
匹配最左前綴的查詢;
匹配列前綴查詢 ;
匹配范圍值得查詢;
精確匹配左前列並范圍匹配另外一列;
只訪問索引的查詢;
BTree索引的使用限制
如果不是按照索引的最左列開始查找,則無法使用索引。
使用索引時不能跳過索引中的列;
Not in 和<>操作無法使用索引;
如果查詢中有某個列的范圍查詢,則其右邊所有的列都無法使用索引;
Hash索引的特點
Hash索引時基於Hash表實現的,只有查詢條件精確匹配Hash索引中的所有列時,才能夠使用到Hash索引。
對於Hash索引中的所有列,存儲引擎都會為每一行計算一個Hash碼,Hash索引中存儲的就是Hash碼。
Hash索引的限制
Hash索引必須進行二次查找
Hash索引無法用於排序
Hash索引不支持部分索引查找也不支持范圍查找
Hash索引中Hash碼的計算可能存在Hash沖突
為什么要使用索引
索引大大減少了存儲引擎需要掃描的數據量
索引可以幫助我們進行排序避免使用臨時表
索引可以把隨機I/O變為順序I/O
索引是不是越多越好
索引會增加寫操作成本
太多的索引會增加查詢優化器的選擇時間