一. 了解索引的種類和用法(這里只探究BTree索引的用法)
1. 唯一索引
唯一索引不允許兩行具有相同的索引值。如果是多列構成的唯一索引,則要求多列的組合值不能出現相同
2. 組合索引
組合索引又稱復合索引,由多列構成。在使用組合索引時,需要保證復合索引的第一列在語句中使用了索引,在合適的場景可以避免回表查詢,在索引中完成查詢。
二. 建立索引的技巧
1.為主鍵,外鍵以及對記錄起明顯標識作用的字段建立索引
這些字段通常會用作條件篩選,表連接,以及排序分組,為這些字段加上單個索引可以縮短sql執行的時間
2.在業務相近的字段上建立組合索引
將一些經常出現在一個結果集中的字段按照順序建立組合索引,通常把篩選效果明顯的字段放在組合索引的前面。
3.在必須要前導模糊查詢的字段在建立全文索引
前導模糊查詢 '%str','%str%'會導致普通索引失效,要想使用索引需要建立全文索引(FULLTEXT INDEX)
4.在不合適的字段上不建索引
一些字段不適用用來建立索引,非但不會優化查詢效率,反而會使查詢效率變得十分低下。
如:
篩選效果不明顯的字段: 篩選后的結果集相對總數據量占比很大時,需要重復的去索引樹中檢索到行數據標識ROWID,然后去表中取出數據。這樣的查詢效率甚至會比全表掃描更低。
字段長度非常大的字段: 備注,大文本等類型的字段在建立索引時,需要消耗很大的空間去存放索引樹
三. 什么情況下會使用索引
COLUMN_INDEX =(>,>=,<,<=) ?
COLUMN_INDEX BETWEEN ? AND ?
COLUMN_INDEX IN (?,?,?)
COLUMN_INDEX LIKE 'str?' (后導模糊查詢)
TABLE1.COLUMN_INDEX = TABLE2.COLUMN_INDEX (表關聯)
書寫SQL的規范
1. 會引起索引失效的SQL
使用not,!=,
使用前導模糊查詢'%str',‘%str%’,
對索引字段使用函數 tip: where id + 1 = 123
對索引字段進行類型轉換 tip: where type = 2 (type 為varchar 類型,此時type_index索引失效)
使用order by排序時,tip: 使用普通索引時,如果結果集為 * 時,不走索引;使用復合索引,如果sql語句使用索引字段的順序和復合索引字段順序不一致時,不走索引
2. 一些低效的sql
整理好后繼續發布