索引(Index)是幫助MySQL高效獲取數據的數據結構。提取句子主干,就可以得到索引的本質:索引是數據結構。
1、按照索引列值的唯一性,索引可分為唯一索引和非唯一索引
非唯一索引:B樹索引
create index 索引名 on 表名(列名) tablespace 表空間名;
唯一索引:建立主鍵或者唯一約束時會自動在對應的列上建立唯一索引
2、索引列的個數:單列索引和復合索引
3、按照索引列的物理組織方式
B樹索引
create index 索引名 on 表名(列名) tablespace 表空間名;
位圖索引
create bitmap index 索引名 on 表名(列名) tablespace 表空間名;
反向鍵索引
create index 索引名 on 表名(列名) reverse tablespace 表空間名;
函數索引
create index 索引名 on 表名(函數名(列名)) tablespace 表空間名;
運用索引的條件
1、較頻繁地作為查詢條件的字段
2、唯一性太差的字段不適合建立索引
3、更新太頻繁地字段不適合創建索引
4、不會出現在where條件中的字段不該建立索引
SQL優化
1、避免使用select * ,而是具體指出選擇哪些列
2、SQL大小寫,數據庫在解析sql時,先把SQL語句轉換為大寫,再進行解析操作,所以建議直接提供大寫的SQL語句。
3、過濾時,>和>=,使用>=優先,如a>2000和a>=2001,這樣可以避免過濾2000和2001之間的小數,可以調高效率
4、where子句中,不等於判斷會使索引失效。
5、where子句中,對列做運算,例如,加減乘除,會使索隱列失效。所以盡量不要在索隱列上做操作。
6、模糊查詢時,like "%abc%",前模糊會導致索引失效,后模糊不會導致索引失效。
SQL Select語句完整的執行順序
1、from子句組裝來自不同數據源的數據;
2、where子句基於指定的條件對記錄行進行篩選;
3、group by子句將數據划分為多個分組;
4、使用聚集函數進行計算;
5、使用having子句篩選分組;
6、計算所有的表達式;
7、使用order by對結果集進行排序。
8、select 集合輸出。