在表上創建索引後,如何使用到這些索引需要注意的問題。
1.索引列上不能使用表達式或函數。
例如:
select * from users where upper(name)=’ABC';
改成
select * from users where name=’ABC';
2.前綴索引和索引列的選擇性
索引的選擇性越高索引效率越高。
3.聯合索引
如何選擇索引列的順序
1.經常會被使用到的列優先
聯合索引的列索引順序是從左到右使用的。
2.選擇性高的列優先
選擇性很差的列不宜放到最左邊。比如狀態列。
3.寬度小的列優先
4.覆蓋索引
索引中包含了所有查詢的字段的情況的索引。
優點:
可以優化緩存,減少磁盤IO操作。
可以減少隨機IO 變隨機IO為順序IO操作。
避免對INNODB主鍵索引的二次查詢
可以避免myisam表進行系統調用
無法使用覆蓋索引的情況:
1.存儲引擎不支持覆蓋索引
2.查詢中使用了太多的列。
3.使用了雙%號的like查詢
5.使用索引掃描優化排序
索引的列順序和order by 子句的順序完全一致
索引中所有列的方向(升序和降序)和order by 子句完全一致
order by 中 的字段全部在關聯表中的第一張表中。
6.利用索引優化鎖
1.索引可以減少鎖定的行數
2.索引可以加快處理速度,同時加快鎖的釋放。
7.刪除重復和冗余的索引
重復的索引:
比如:
primary key(id),unique key (id) ,index (id);
這樣索引就重復了
冗余的索引:
index(name) ,index(name,age) 聯合索引,那麼 index(name) 就冗余了。
可以使用工具
pt-duplicate-key-checker –h=localhost 檢查重復索引。
查找未被使用過的索引:
更新索引統計信息及減少索引碎片
analyze table table_name;