索引mysql
索引是爲了方便查找咱們所須要的數據。sql
mysql支持的索引數據類型優化
B-Tree索引的特色spa
B-Tree索引以B+Tree(樹)的結構存儲數據。排序
B-Tree索引可以加快數據的查詢速度;索引
B-Tree更適合進行範圍查找;class
在什麼狀況下能夠用到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
索引是否是越多越好
索引會增長寫操做成本
太多的索引會增長查詢優化器的選擇時間