欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL索引失效的幾種情況詳析

 更新時(shí)間:2020年12月01日 09:03:21   作者:哈哈二兩  
這篇文章主要給大家介紹了關(guān)于MySQL索引失效的幾種情況,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.前導(dǎo)模糊查詢不能利用索引(like '%XX'或者like '%XX%')

假如有這樣一列code的值為'AAA','AAB','BAA','BAB' ,如果where code like '%AB'條件,由于前面是

模糊的,所以不能利用索引的順序,必須一個(gè)個(gè)去找,看是否滿足條件。這樣會(huì)導(dǎo)致全索引掃描或者全表掃

描。如果是這樣的條件where code like 'A % ',就可以查找CODE中A開頭的CODE的位置,當(dāng)碰到B開頭的

數(shù)據(jù)時(shí),就可以停止查找了,因?yàn)楹竺娴臄?shù)據(jù)一定不滿足要求。這樣就可以利用索引了。

2.如果是組合索引的話,如果不按照索引的順序進(jìn)行查找,比如直接使用第三個(gè)位置上的索引而忽略第一二個(gè)位置上的索引時(shí),則會(huì)進(jìn)行全表查詢

索引為c1,c2,c3,c4

上圖結(jié)果顯示直接使用c3是全表查詢,無法使用該索引的,所以c3字段使用索引的前提是c1,c2兩字段均使用了索引。

3.條件中有or

應(yīng)盡量避免在 where 子句中使用 or 來連接條件,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如:

select id from t where num=10 or num=20

可以這樣查詢:

select id from t where num=10 union all select id from t where num=20

4.索引無法存儲(chǔ)null值,所以where的判斷條件如果對(duì)字段進(jìn)行了null值判斷,將導(dǎo)致數(shù)據(jù)庫(kù)放棄索引而進(jìn)行全表查詢,如

select id from t where num is null

可以在num上設(shè)置默認(rèn)值0,確保表中num列沒有null值,然后這樣查詢:

select id from t where num=0

a.單列索引無法儲(chǔ)null值,復(fù)合索引無法儲(chǔ)全為null的值。

b.查詢時(shí),采用is null條件時(shí),不能利用到索引,只能全表掃描。

為什么索引列無法存儲(chǔ)Null值?

a.索引是有序的。NULL值進(jìn)入索引時(shí),無法確定其應(yīng)該放在哪里。(將索引列值進(jìn)行建樹,其中必然涉及到諸多的比較操作,null 值是不確定值無法比較,無法確定null出現(xiàn)在索引樹的葉子節(jié)點(diǎn)位置。)

5.應(yīng)盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描。

6.in 和 not in 也要慎用,否則會(huì)導(dǎo)致全表掃描,如:

select id from t where num in(1,2,3)

對(duì)于連續(xù)的數(shù)值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

7. 應(yīng)盡量避免在where子句中對(duì)字段進(jìn)行函數(shù)操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。如:

–name以abc開頭的id

select id from t where substring(name,1,3)='abc'

8.應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行表達(dá)式操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。如:

select id from t where num/2=100

應(yīng)改為:

select id from t where num=100*2

總結(jié)

到此這篇關(guān)于MySQL索引失效的幾種情況的文章就介紹到這了,更多相關(guān)MySQL索引失效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL 如何使用事務(wù)

    MySQL 如何使用事務(wù)

    這篇文章主要介紹了MySQL 如何使用事務(wù),幫助大家更好的理解和學(xué)習(xí)MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-09-09
  • mysql5.6.19下子查詢?yōu)槭裁礋o法使用索引

    mysql5.6.19下子查詢?yōu)槭裁礋o法使用索引

    這篇文章主要介紹了mysql5.6.19下子查詢?yōu)槭裁礋o法使用索引,需要的朋友可以參考下
    2014-08-08
  • MySQL中ONLY_FULL_GROUP_BY的使用小結(jié)

    MySQL中ONLY_FULL_GROUP_BY的使用小結(jié)

    ONLY_FULL_GROUP_BY是MySQL中的一個(gè)重要SQL模式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 解決Mysql5.7中文亂碼的問題

    解決Mysql5.7中文亂碼的問題

    在使用mysql5.7時(shí),會(huì)發(fā)現(xiàn)通過web端向數(shù)據(jù)庫(kù)中寫入中文后會(huì)出現(xiàn)亂碼,但是在數(shù)據(jù)庫(kù)中直接操作SQL語句插入數(shù)據(jù)后中文就顯示正常,這個(gè)問題怎么解決呢,下面小編給大家分享下解決方案
    2017-03-03
  • mysql鎖表確認(rèn)及解除鎖表的實(shí)現(xiàn)示例

    mysql鎖表確認(rèn)及解除鎖表的實(shí)現(xiàn)示例

    使用MySQL數(shù)據(jù)庫(kù)時(shí),我們可能會(huì)遇到數(shù)據(jù)庫(kù)表被鎖定的情況,本文主要介紹了mysql鎖表確認(rèn)及解除鎖表的實(shí)現(xiàn)示例, 具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • 如何把本地mysql遷移到服務(wù)器數(shù)據(jù)庫(kù)

    如何把本地mysql遷移到服務(wù)器數(shù)據(jù)庫(kù)

    這篇文章主要介紹了如何把本地mysql遷移到服務(wù)器數(shù)據(jù)庫(kù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • MySQL中導(dǎo)出用戶權(quán)限設(shè)置的腳本分享

    MySQL中導(dǎo)出用戶權(quán)限設(shè)置的腳本分享

    這篇文章主要介紹了MySQL中導(dǎo)出用戶權(quán)限設(shè)置的腳本分享,本文通過導(dǎo)出mysql.user表中數(shù)據(jù)實(shí)現(xiàn)導(dǎo)出權(quán)限設(shè)置,需要的朋友可以參考下
    2014-10-10
  • mysql下修改engine引擎的方法

    mysql下修改engine引擎的方法

    修改mysql的引擎為INNODB,可以使用外鍵,事務(wù)等功能,性能高。
    2011-08-08
  • 解決遠(yuǎn)程連接mysql很慢的方法(mysql_connect 打開連接慢)

    解決遠(yuǎn)程連接mysql很慢的方法(mysql_connect 打開連接慢)

    有次同事提出開發(fā)使用的mysql數(shù)據(jù)庫(kù)連接很慢,因?yàn)槲覀兊膍ysql開發(fā)數(shù)據(jù)庫(kù)是單獨(dú)一臺(tái)機(jī)器部署的,所以認(rèn)為可能是網(wǎng)絡(luò)連接問題導(dǎo)致的。
    2011-07-07
  • MySQL on k8s 云原生環(huán)境部署

    MySQL on k8s 云原生環(huán)境部署

    這篇文章主要為大家介紹了MySQL on k8s 云原生環(huán)境部署實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評(píng)論