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

SQL Select語句完整的執行順序

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM