1. 程式人生 > 資料庫 >Mysql索引,有哪幾種索引,什麼時候該(不該)建索引;SQL怎麼進行優化以及SQL關鍵字的執行順序

Mysql索引,有哪幾種索引,什麼時候該(不該)建索引;SQL怎麼進行優化以及SQL關鍵字的執行順序

索引(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%",前模糊會導致索引失效,後模糊不會導致索引失效。

7、where語句中,=左邊進行函式、算術、其他表示式運算可能會使索引失效。

SQL Select語句完整的執行順序

1、from子句組裝來自不同資料來源的資料;
2、where子句基於指定的條件對記錄行進行篩選;
3、group by子句將資料劃分為多個分組;
4、使用聚集函式進行計算;
5、使用having子句篩選分組;
6、計算所有的表示式;
7、使用order by對結果集進行排序。

8、select 集合輸出。