溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用mysql索引的注意事項有哪些

發(fā)布時間:2022-01-14 16:11:17 來源:億速云 閱讀:109 作者:小新 欄目:數(shù)據(jù)庫

這篇文章主要介紹了使用mysql索引的注意事項有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

mysql的優(yōu)化可以從硬件設(shè)備的選擇、操作系統(tǒng)、數(shù)據(jù)庫結(jié)構(gòu)設(shè)計、SQL查詢、應(yīng)用程序各個方面進(jìn)行y優(yōu)化,這里只從數(shù)據(jù)庫的設(shè)計及查詢語句方面進(jìn)行優(yōu)化。
  1,創(chuàng)建索引
  對 于查詢占主要的應(yīng)用來說,索引顯得尤為重要。很多時候性能問題很簡單的就是因為我們忘了添加索引而造成的,或者說沒有添加更為有效的索引導(dǎo)致。如果不加索 引的話,那么查找任何哪怕只是一條特定的數(shù)據(jù)都會進(jìn)行一次全表掃描,如果一張表的數(shù)據(jù)量很大而符合條件的結(jié)果又很少,那么不加索引會引起致命的性能下降。
  但是也不是什么情況都非得建索引不可,比如性別可能就只有兩個值,建索引不僅沒什么優(yōu)勢,還會影響到更新速度,這被稱為過度索引。
  2,復(fù)合索引
  比如有一條語句是這樣的:select * from users where area=’beijing’ and age=22;
  如 果我們是在area和age上分別創(chuàng)建單個索引的話,由于mysql查詢每次只能使用一個索引,所以雖然這樣已經(jīng)相對不做索引時全表掃描提高了很多效率, 但是如果在area、age兩列上創(chuàng)建復(fù)合索引的話將帶來更高的效率。
  如果我們創(chuàng)建了(area, age, salary)的復(fù)合索引,那么其實相當(dāng)于創(chuàng)建了(area,age,salary)、(area,age)、(area)三個索引,這被稱為最佳左前綴 特性。因此我們在創(chuàng)建復(fù)合索引時應(yīng)該將最常用作限制條件的列放在最左邊,依次遞減。
  3,索引不會包含有NULL值的列
  只要列中包含有NULL值都將不會被包含在索引中,復(fù)合索引中只要有一列含有NULL值,那么這一列對于此復(fù)合索引就是無效的。所以我們在數(shù)據(jù)庫設(shè)計時不要讓字段的默認(rèn)值為NULL。
  4,使用短索引
  對串列進(jìn)行索引,如果可能應(yīng)該指定一個前綴長度。例如,如果有一個CHAR(255)的 列,如果在前10 個或20 個字符內(nèi),多數(shù)值是惟一的,那么就不要對整個列進(jìn)行索引。短索引不僅可以提高查詢速度而且可以節(jié)省磁盤空間和I/O操作。
  5,排序的索引問題
  mysql查詢只使用一個索引,因此如果where子句中已經(jīng)使用了索引的話,那么order by中的列是不會使用索引的。因此數(shù)據(jù)庫默認(rèn)排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列創(chuàng)建復(fù)合索引。
  6,like語句操作
  一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是一個問題。like “%aaa%” 不會使用索引而like “aaa%”可以使用索引。
  7,不要在列上進(jìn)行運(yùn)算
  select * from users where YEAR(adddate)<2007;將在每個行上進(jìn)行運(yùn)算,這將導(dǎo)致索引失效而進(jìn)行全表掃描,因此我們可以改成select * from users where adddate<&lsquo;2007-01-01&rsquo;;
  8,不使用NOT IN和<>操作
  NOT IN和<>操作都不會使用索引將進(jìn)行全表掃描。NOT IN可以NOT EXISTS代替,id<>3則可使用id>3 or id<3來代替

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“使用mysql索引的注意事項有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI