索引列上不能使用表達式或函數緩存
select….from product函數
where to_days(out_date)-to_days(current_date)<=30;優化
索引優化策略spa
前綴索引和索引列的選擇性orm
create index index_name on table (col_name(n));排序
索引的選擇性是不重複的索引值和表的記錄數的比值。索引
聯合索引it
如何選擇索引列的順序io
常常會被使用到的列優先table
選擇性高的列優先
寬度小的列優先
覆蓋索引
優勢
能夠優化緩存,減小磁盤IO操做;
能夠減小隨機IO,隨機IO操做變爲順序IO操做;
能夠避免對Innoddb主鍵索引的二次查詢;
能夠避免MyISAM表進行系統調用;
沒法使用覆蓋索引的狀況
存儲引擎不支持覆蓋索引;
查詢中使用了太多的列;
使用了雙%號的like查詢;
使用索引來優化查詢
使用索引掃描來優化排序
經過排序操做
按照索引順序掃描數據
使用索引掃描來優化排序
索引的列順序和order by子句的順序徹底一致;
索引中全部列的方向(升序,降序)和order by 子句徹底一致;
order by中的字段所有在關聯表的第一張表中;
模擬Hash索引優化查詢
只能處理鍵值的全值匹配查找;
所使用的Hash函數決定着索引鍵的大小;
利用索引優化鎖
索引能夠減小鎖定的行數
索引能夠加快處理速度,同時也加快了鎖的釋放
索引的維護和優化
刪除重複和冗餘的索引
查找未被使用過的索引
SELECT object_schema,object_name,index_name,b.`TABLE_ROWS` FROM performance_schema.table_io_waits_summary_by_index_usage a JOIN information_schema.tables b ON
a.`OBJECT_SCHEMA`=b.`TABLE_SCHEMA` AND
a.`OBJECT_NAME`=b.`TABLE_NAME`
WHERE index_name IS NOT NULL
AND count_star=0
ORDER BY object_schema,object_name;
更新索引統計信息及減小索引碎片
analyze table table_name
optimize table table_name(使用不當會致使鎖表)