普通索引:即一個索引只包含單個列,一個表能夠有多個單列索引mysql
惟一索引:索引列的值必須惟一,但容許有空值sql
複合索引:即一個索引包含多個列函數
聚簇索引(彙集索引):並非一種單獨的索引類型,而是一種數據存儲方式。具體細節取決於不一樣的實現,InnoDB的聚簇索引其實就是在同一個結構中保存了B-Tree索引(技術上來講是B+Tree)和數據行。spa
非聚簇索引:不是聚簇索引,就是非聚簇索引3d
基礎語法blog
查看索引索引
SHOW INDEX FROM table_name\G字符串
建立索引table
CREATE [UNIQUE ] INDEX indexName ON mytable(columnname(length));效率
ALTER TABLE 表名 ADD [UNIQUE ] INDEX [indexName] ON (columnname(length))
刪除索引
DROP INDEX [indexName] ON mytable;
策略1.儘可能全值匹配
策略2.最佳左前綴法則
若是索引了多列,要遵照最左前綴法則。指的是查詢從索引的最左前列開始而且不跳過索引中的列。
策略3.不在索引列上作任何操做
不在索引列上作任何操做(計算、函數、(自動or手動)類型轉換),會致使索引失效而轉向全表掃描
策略4.範圍條件放最後
中間有範圍查詢會致使後面的索引列所有失效
策略5.覆蓋索引儘可能用
策略6.不等於要甚用
mysql 在使用不等於(!= 或者<>)的時候沒法使用索引會致使全表掃描
若是定要須要使用不等於,請用覆蓋索引
策略7.Null/Not 有影響
在字段爲not null的狀況下,使用is null 或 is not null 會致使索引失效
自定義爲NULL或者不定義,is not null 的狀況會致使索引失效
策略8.Like查詢要小心
策略9.字符類型加引號
字符串不加單引號索引失效
策略10.OR改UNION效率高