通過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...