日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

12、索引在什么情况下不会被使用?

發(fā)布時(shí)間:2025/3/20 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 12、索引在什么情况下不会被使用? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

索引可以提高查詢的速度,但并不是使用帶有索引的字段查詢時(shí),索引都會(huì)起作用。使用索引有幾種特殊情況,在這些情況下,

有可能使用帶有索引的字段查詢時(shí),索引并沒(méi)有起作用,下面重點(diǎn)介紹這幾種特殊情況。

1. 查詢語(yǔ)句中使用LIKE關(guān)鍵字

在查詢語(yǔ)句中使用 LIKE 關(guān)鍵字進(jìn)行查詢時(shí),如果匹配字符串的第一個(gè)字符為“%”,索引不會(huì)被使用。如果“%”不是在第一個(gè)位置,索引就會(huì)被使用。

例 1
為了便于理解,我們先查詢 tb_student 表中的數(shù)據(jù),SQL 語(yǔ)句和運(yùn)行結(jié)果如下:

mysql> SELECT * FROM tb_student; +----+------+------+------+ | id | name | age | sex | +----+------+------+------+ | 1 | 張三 | 12 || | 2 | 李四 | 12 || | 3 | 王五 | 13 || | 4 | 張四 | 13 || | 5 | 王四 | 15 || | 6 | 趙六 | 12 || +----+------+------+------+

下面在查詢語(yǔ)句中使用 LIKE 關(guān)鍵字,且匹配的字符串中含有“%”符號(hào),使用 EXPLAIN 分析查詢情況,SQL 語(yǔ)句和運(yùn)行結(jié)果如下:

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

第一個(gè)查詢語(yǔ)句執(zhí)行后,rows 參數(shù)的值為 6,表示這次查詢過(guò)程中查詢了 6 條記錄;第二個(gè)查詢語(yǔ)句執(zhí)行后,rows 參數(shù)的值為 1,表示這次查詢過(guò)程只查詢 1 條記錄。同樣是使用 name 字段進(jìn)行查詢,因?yàn)榈谝粋€(gè)查詢語(yǔ)句的 LIKE 關(guān)鍵字后的字符串是以“%”開頭的,所以第一個(gè)查詢語(yǔ)句沒(méi)有使用索引,而第二個(gè)查詢語(yǔ)句使用了索引 index_name。

2. 查詢語(yǔ)句中使用多列索引

多列索引是在表的多個(gè)字段上創(chuàng)建一個(gè)索引,只有查詢條件中使用了這些字段中的第一個(gè)字段,索引才會(huì)被使用。

例 2
在 name 和 age 兩個(gè)字段上創(chuàng)建多列索引,并驗(yàn)證多列索引的使用情況,SQL 語(yǔ)句和運(yùn)行結(jié)果如下:

mysql> CREATE INDEX index_name_age ON tb_student(name,age); mysql> EXPLAIN SELECT * FROM tb_student WHERE name LIKE '李%'\G *************************** 1. row ***************************id: 1select_type: SIMPLEtable: tb_studentpartitions: NULLtype: range possible_keys: index_name_agekey: index_name_agekey_len: 77ref: NULLrows: 1filtered: 100.00Extra: Using index condition mysql> EXPLAIN SELECT * FROM tb_student WHERE age LIKE '12'\G *************************** 1. row ***************************id: 1select_type: SIMPLEtable: tb_studentpartitions: NULLtype: ALL possible_keys: NULLkey: NULLkey_len: NULLref: NULLrows: 6filtered: 16.67Extra: Using where

第一條查詢語(yǔ)句的查詢條件使用了 name 字段,分析結(jié)果顯示 rows 參數(shù)的值為 1,且查詢過(guò)程中使用了 index_name_age 索引。第二條查詢語(yǔ)句的查詢條件使用了 age 字段,結(jié)果顯示 rows 參數(shù)的值為 6,且 key 參數(shù)的值為 NULL,這說(shuō)明第二個(gè)查詢語(yǔ)句沒(méi)有使用索引。

因?yàn)?name 字段是多列索引的第一個(gè)字段,所以只有查詢條件中使用了 name 字段才會(huì)使 index_name_age 索引起作用。

3. 查詢語(yǔ)句中使用OR關(guān)鍵字

查詢語(yǔ)句只有 OR 關(guān)鍵字時(shí),如果 OR 前后的兩個(gè)條件的列都是索引,那么查詢中將使用索引。如果 OR 前后有一個(gè)條件的列不是索引,那么查詢中將不使用索引。

例 3
下面演示 OR 關(guān)鍵字的使用。

mysql> EXPLAIN SELECT * FROM tb_student WHERE name='張三' or sex='男'\G *************************** 1. row ***************************id: 1select_type: SIMPLEtable: tb_studentpartitions: NULLtype: ALL possible_keys: index_name,index_name_agekey: NULLkey_len: NULLref: NULLrows: 6filtered: 30.56Extra: Using where mysql> EXPLAIN SELECT * FROM tb_student WHERE name='張三' or id='12'\G *************************** 1. row ***************************id: 1select_type: SIMPLEtable: tb_studentpartitions: NULLtype: index_merge possible_keys: PRIMARY,index_name,index_name_agekey: index_name,PRIMARYkey_len: 77,4ref: NULLrows: 2filtered: 100.00Extra: Using union(index_name,PRIMARY); Using where

由于 sex 字段沒(méi)有索引,所以第一條查詢語(yǔ)句沒(méi)有使用索引;name 字段和 id 字段都有索引,所以第二條查詢語(yǔ)句使用了 index_name 和 PRIMARY 索引 。

總結(jié)

使用索引查詢記錄時(shí),一定要注意索引的使用情況。例如,LIKE 關(guān)鍵字配置的字符串不能以“%”開頭;使用多列索引時(shí),查詢條件必須要使用這個(gè)索引的第一個(gè)字段;使用 OR 關(guān)鍵字時(shí),OR 關(guān)鍵字連接的所有條件都必須使用索引。

總結(jié)

以上是生活随笔為你收集整理的12、索引在什么情况下不会被使用?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。