1、在mysql中使用不等於!= 或者<>,會導致無法使用索引,全表掃瞄
2、is null,is not null 會導致無法使用索引
3、like以萬用字元開頭』%…』。索引失效導致全表掃瞄
4、字串不加單引號會導致索引失效
5、多用or進行連線會導致索引失效
6、減少select * 這種方式進行查詢
檢視索引生效
explain + sql語句模擬的是優化器執行sql查詢語句的,分析查詢語句的效能
例:執行結果
id的具體內容:
select查詢的序列號,包含的是一組數字,表示的是查詢中執行的select子句或者操作表的順序
id 相同,執行的順序由上而下
id不同,如果是子查詢,id的序號會進行遞增,id越大優先順序越高,越先被執行
select_type
查詢型別,主要用於區分普通查詢,聯合查詢,子查詢等等的複雜查詢
型別說明
primary
查詢中包含任何複雜的子部分,最外層的查詢被標記為
subquery
在select或者where中包含了子查詢的
******
簡單的select查詢,不包含子查詢或者union
union
第二個select語句出現在union之後,就會被標記為union
union result
從union表中獲取到select
derived
在from後面的列表中包含子查詢,mysql會執行這些子查詢,會把這些結果放在臨時表裡面,union包含在from子句的子查詢中,外層的select被標記為
type
顯示查詢使用了哪種型別
allfull table scan,將遍歷全表找到匹配的行
range
只檢索給定範圍的行,一般情況下,where語句**現 > < between in等查詢
index
full index scan ,與all相比,遍歷的是索引樹,速度比all快
eq_ref
唯一性索引掃瞄,對於每乙個索引鍵,表中只有一條資料與之匹配,常見於主鍵和唯一索引掃瞄
ref非唯一性索引掃瞄,返回匹配到某個單獨值的所有行
const
通過索引,一次就找到了資料,const一般用於比較主鍵和唯一索引,因為只匹配一行,將主鍵放在where中,mysql就能將這個查詢轉換為乙個常量
system
表只有一行資料(等於系統表),這個平常一般不會出現,一般忽略
system > const >eq_ref>ref > range >index > all
最優 --------->最差
重點:語句一般到達到range
表示索引中使用的位元組數。可通過該列計算查詢中使用的索引長度,在不損失精確性的條件下,長度越短越好
顯示索引的哪一列被使用
額外資訊
關於focus 不生效的問題
有時候想讓輸入框自動獲取標籤,給它寫了個focus 但是一直不生效。目前發現不生效的原因 pc端 有兩種 還有乙個原因是在ios下無法觸發focus事件,原因和解決方法請檢視 1 html的dom結構發生了變化。例如input框在乙個類為input box的div裡面,而前面寫了個事件把 input...
MySQL建立索引 判斷索引是否生效
mysql建立索引 現有資料表 jingjia info,共658行資料 查詢表中使用的索引 show index from 表名 檢視查詢語句中是否使用了索引 方式一 explain 查詢語句 explain select from jingjia info 方式二 使用時間檢測 執行時間檢測 s...
mysql聯合索引生效原則
mysql中 myisam,innodb預設使用的是 btree索引,至於btree的資料結構是怎樣的都不重要,只需要知道結果,既然是索引那這個資料結構最後是排好序 就像新華字典他的目錄就是按照a,b,c 這樣排好序的 所以你在找東西的時候才快,比如你找 中 這個字的解釋,你肯定就會定位到目錄的 z...