人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

Mysql中SQL語句不使用索引的情況

發(fā)布日期:2022-03-14 09:12 | 文章來源:源碼之家

MySQL查詢不使用索引匯總

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

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

如果使用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條件中必須將字符常量值加引號,否則即使該列上存在索引,也不會(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)該重新考慮建立索引??梢酝ㄟ^:show status like 'Handler_read%'來查看著連個(gè)參數(shù)的值。

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

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

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

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

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

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

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

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

show status like 'Handler_read%';

大家可以注意:

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

handler_read_rnd_next:這個(gè)值越高,說明查詢越低效。

總結(jié)

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

美國服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部