主頁(yè) > 知識(shí)庫(kù) > Mysql中SQL語(yǔ)句不使用索引的情況

Mysql中SQL語(yǔ)句不使用索引的情況

熱門標(biāo)簽:南昌高頻外呼系統(tǒng)哪家公司做的好 淄博400電話申請(qǐng) 百度地圖標(biāo)注后不顯示 電銷機(jī)器人各個(gè)細(xì)節(jié)介紹 電銷機(jī)器人 行業(yè) 昆明電信400電話辦理 溫州瑞安400電話怎么申請(qǐng) 俄國(guó)地圖標(biāo)注app 電話機(jī)器人市場(chǎng)趨勢(shì)

MySQL查詢不使用索引匯總

眾所周知,增加索引是提高查詢速度的有效途徑,但是很多時(shí)候,即使增加了索引,查詢?nèi)匀徊皇褂盟饕?,這種情況嚴(yán)重影響性能,這里就簡(jiǎn)單總結(jié)幾條MySQL不使用索引的情況

如果MySQL估計(jì)使用索引比全表掃描更慢,則不使用索引。例如,如果列key均勻分布在1和100之間,下面的查詢使用索引就不是很好:select * from table_name where key>1 and key90;

如果使用MEMORY/HEAP表,并且where條件中不使用“=”進(jìn)行索引列,那么不會(huì)用到索引,head表只有在“=”的條件下才會(huì)使用索引

用or分隔開的條件,如果or前的條件中的列有索引,而后面的列沒有索引,那么涉及到的索引都不會(huì)被用到,例如:select * from table_name where key1='a' or key2='b';如果在key1上有索引而在key2上沒有索引,則該查詢也不會(huì)走索引

復(fù)合索引,如果索引列不是復(fù)合索引的第一部分,則不使用索引(即不符合最左前綴),例如,復(fù)合索引為(key1,key2),則查詢select * from table_name where key2='b';將不會(huì)使用索引

如果like是以‘%'開始的,則該列上的索引不會(huì)被使用。例如select * from table_name where key1 like '%a';該查詢即使key1上存在索引,也不會(huì)被使用

如果列為字符串,則where條件中必須將字符常量值加引號(hào),否則即使該列上存在索引,也不會(huì)被使用。例如,select * from table_name where key1=1;如果key1列保存的是字符串,即使key1上有索引,也不會(huì)被使用。

從上面可以看出,即使我們建立了索引,也不一定會(huì)被使用,那么我們?nèi)绾沃牢覀兯饕氖褂们闆r呢??在MySQL中,有Handler_read_keyHandler_read_rnd_key兩個(gè)變量,如果Handler_read_key值很高而Handler_read_rnd_key的值很低,則表明索引經(jīng)常不被使用,應(yīng)該重新考慮建立索引。可以通過(guò):show status like 'Handler_read%'來(lái)查看著連個(gè)參數(shù)的值。

關(guān)于如何正確創(chuàng)建Mysql的索引,請(qǐng)參考怎樣正確創(chuàng)建MySQL索引的方法詳解;眾所周知,數(shù)據(jù)表索引可以提高數(shù)據(jù)的檢索效率,也可以降低數(shù)據(jù)庫(kù)的IO成本,并且索引還可以降低數(shù)據(jù)庫(kù)的排序成本;但索引并不是時(shí)時(shí)都會(huì)生效的,比如以下幾種情況,將導(dǎo)致索引失效:

1.如果條件中有or,即使其中有條件帶索引也不會(huì)使用索引(這也是為什么SQL語(yǔ)句中盡量少用or的原因)

注意:要想使用or,又想讓索引生效,只能將or條件中的每個(gè)列都加上索引。

2.對(duì)于多列索引,不是使用的第一部分,則不會(huì)使用索引。

3.like查詢是以%開頭時(shí)不會(huì)使用索引。

4.如果列類型是字符串,那一定要在條件中將數(shù)據(jù)使用引號(hào)引用起來(lái),否則不使用索引。

5.如果 mysql 估計(jì)使用全表掃描要比使用索引快,則不使用索引。

此外,查看索引的使用情況

show status like 'Handler_read%';

大家可以注意:

handler_read_key:這個(gè)值越高越好,越高表示使用索引查詢到的次數(shù)。

handler_read_rnd_next:這個(gè)值越高,說(shuō)明查詢?cè)降托А?/p>

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

您可能感興趣的文章:
  • MySQL存儲(chǔ)時(shí)間類型選擇的問(wèn)題講解
  • MySQL中decimal類型用法的簡(jiǎn)單介紹
  • Mysql將一個(gè)表中的某一列數(shù)據(jù)復(fù)制到另一個(gè)表中某一列里的方法
  • 如何提高M(jìn)ySQL Limit查詢性能的方法詳解
  • Mysql主從數(shù)據(jù)庫(kù)(Master/Slave)同步配置與常見錯(cuò)誤
  • Mysql Explain命令的使用與分析
  • 怎樣正確創(chuàng)建MySQL索引的方法詳解
  • Mysql中replace與replace into的用法講解
  • 通過(guò)MySQL慢查詢優(yōu)化MySQL性能的方法講解
  • MySQL使用命令創(chuàng)建、刪除、查詢索引的介紹

標(biāo)簽:洛陽(yáng) 安徽 葫蘆島 甘南 拉薩 嘉峪關(guān) 吐魯番

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Mysql中SQL語(yǔ)句不使用索引的情況》,本文關(guān)鍵詞  Mysql,中,SQL,語(yǔ)句,不,使用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Mysql中SQL語(yǔ)句不使用索引的情況》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Mysql中SQL語(yǔ)句不使用索引的情況的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章