索引使用技巧及sql書寫規范

一. 了解索引的種類和用法(這里只探究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

整理好后繼續發布

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容