SQL索引的使用

2021-09-25 23:52:28 字數 1066 閱讀 3740

通過explain , 檢視執行計畫,執行sql時是否使用索引

1.避免索引失效

1). 全值匹配 ,對索引中所有列都指定具體值。

該情況下,索引生效,執行效率高。

2). 最左字首法則

如果索引了多列,要遵守最左字首法則。指的是查詢從索引的最左前列開始,並且不跳過索引中的列。

匹配最左字首法則,走索引:

違背最左字首法則 , 索引失效:

如果符合最左法則,但是出現跳躍某一列,只有最左列索引生效:

3). 範圍查詢右邊的列,不能使用索引 。

4). 不要在索引列上進行運算操作, 索引將失效。

5). 字串不加單引號,造成索引失效。

由於,在查詢時,沒有對字串加單引號,mysql的查詢優化器,會自動的進行型別轉換,造成索引失效。

6). 盡量使用覆蓋索引,避免select *

盡量使用覆蓋索引(只訪問索引的查詢(索引列完全包含查詢列)),減少select * 。

如果查詢列,超出索引列,也會降低效能。

tip :

using index :使用覆蓋索引的時候就會出現

using where:在查詢使用索引的情況下,需要回表去查詢所需的資料

using index condition:查詢使用了索引,但是需要回表查詢資料

using index ; using where:查詢使用了索引,但是需要的資料都在索引列中能找到,所以不需要回表

查詢資料

7). 用or分割開的條件, 如果or前的條件中的列有索引,而後面的列中沒有索引,那麼涉及的索引都不會被用到。

8). 以%開頭的like模糊查詢,索引失效。

如果僅僅是尾部模糊匹配,索引不會失效。如果是頭部模糊匹配,索引失效。

解決方案 :

通過覆蓋索引來解決

9). 如果mysql評估使用索引比全表更慢,則不使用索引。

10). is null , is not null 有時索引失效。

11). in 走索引, not in 索引失效。

12). 單列索引和復合索引。

盡量使用復合索引,而少使用單列索引 。

Sql索引使用

sql 查詢中,因為我們鍵盤輸入的總是字元型,遇到不同的資料型別,比較的時候,總是要把資料型別轉換一致,常用的思路有兩種 oracle 為例 新建表td rewardworkf 表結構如圖 表資料百萬左右。1,將原資料表的列 轉換成字元型別,然後和 具體條件比較,即 to char oprtime,...

SQL中索引的使用

相信很多人寫sql,但是都沒有用到過索引,甚至不知道索引為何物?當然,很多功能不需要用索引頁能實現,那麼微軟為什麼還要設計索引這個工具呢?簡單來說,就是為了提高效能。比如說 新華字典中有很多字,我們要查其中的某乙個字,怎麼查?方法一 剛開始我們可以拼音查詢,恰好字典中字的排序就是拼音。方法二 偏旁查...

sql優化 使用索引

專案中使用了大量的sql,對於查詢sql,如果沒有使用索引會對查詢速度造成很大的影響,例如如下sql select a.name,b.id from tablea a join tableb b on a.id b.other id where a.name test and b.pin 123 a...