12、索引在什么情况下不会被使用?
索引可以提高查詢的速度,但并不是使用帶有索引的字段查詢時,索引都會起作用。使用索引有幾種特殊情況,在這些情況下,
有可能使用帶有索引的字段查詢時,索引并沒有起作用,下面重點介紹這幾種特殊情況。
1. 查詢語句中使用LIKE關鍵字
在查詢語句中使用 LIKE 關鍵字進行查詢時,如果匹配字符串的第一個字符為“%”,索引不會被使用。如果“%”不是在第一個位置,索引就會被使用。
例 1
為了便于理解,我們先查詢 tb_student 表中的數據,SQL 語句和運行結果如下:
下面在查詢語句中使用 LIKE 關鍵字,且匹配的字符串中含有“%”符號,使用 EXPLAIN 分析查詢情況,SQL 語句和運行結果如下:
mysql> EXPLAIN SELECT * FROM tb_student WHERE name LIKE '%四'\G *************************** 1. row ***************************id: 1select_type: SIMPLEtable: tb_studentpartitions: NULLtype: ALL possible_keys: NULLkey: NULLkey_len: NULLref: NULLrows: 6filtered: 16.67Extra: Using where mysql> CREATE INDEX index_name ON tb_student(name); mysql> EXPLAIN SELECT * FROM tb_student WHERE name LIKE '李%'\G *************************** 1. row ***************************id: 1select_type: SIMPLEtable: tb_studentpartitions: NULLtype: range possible_keys: index_namekey: index_namekey_len: 77ref: NULLrows: 1filtered: 100.00Extra: Using index condition第一個查詢語句執行后,rows 參數的值為 6,表示這次查詢過程中查詢了 6 條記錄;第二個查詢語句執行后,rows 參數的值為 1,表示這次查詢過程只查詢 1 條記錄。同樣是使用 name 字段進行查詢,因為第一個查詢語句的 LIKE 關鍵字后的字符串是以“%”開頭的,所以第一個查詢語句沒有使用索引,而第二個查詢語句使用了索引 index_name。
2. 查詢語句中使用多列索引
多列索引是在表的多個字段上創建一個索引,只有查詢條件中使用了這些字段中的第一個字段,索引才會被使用。
例 2
在 name 和 age 兩個字段上創建多列索引,并驗證多列索引的使用情況,SQL 語句和運行結果如下:
第一條查詢語句的查詢條件使用了 name 字段,分析結果顯示 rows 參數的值為 1,且查詢過程中使用了 index_name_age 索引。第二條查詢語句的查詢條件使用了 age 字段,結果顯示 rows 參數的值為 6,且 key 參數的值為 NULL,這說明第二個查詢語句沒有使用索引。
因為 name 字段是多列索引的第一個字段,所以只有查詢條件中使用了 name 字段才會使 index_name_age 索引起作用。
3. 查詢語句中使用OR關鍵字
查詢語句只有 OR 關鍵字時,如果 OR 前后的兩個條件的列都是索引,那么查詢中將使用索引。如果 OR 前后有一個條件的列不是索引,那么查詢中將不使用索引。
例 3
下面演示 OR 關鍵字的使用。
由于 sex 字段沒有索引,所以第一條查詢語句沒有使用索引;name 字段和 id 字段都有索引,所以第二條查詢語句使用了 index_name 和 PRIMARY 索引 。
總結
使用索引查詢記錄時,一定要注意索引的使用情況。例如,LIKE 關鍵字配置的字符串不能以“%”開頭;使用多列索引時,查詢條件必須要使用這個索引的第一個字段;使用 OR 關鍵字時,OR 關鍵字連接的所有條件都必須使用索引。
總結
以上是生活随笔為你收集整理的12、索引在什么情况下不会被使用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 11、修改和删除索引(DROP INDE
- 下一篇: 2、MySQL创建存储过程(CREATE