您好,登錄后才能下訂單哦!
這篇文章主要介紹了數(shù)據(jù)庫的語句應(yīng)該如何優(yōu)化,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
在MySQL數(shù)據(jù)庫怎么加快查詢速度,優(yōu)化查詢效率,主要原則就是應(yīng)盡量避免全表掃描,應(yīng)該考慮在where及orderby涉及的列上建立索引。
第一:表里的索引不是越多越好
一個表的索引不是越多越好,也沒有一個具體的數(shù)字,根據(jù)以往的經(jīng)驗,一個表的索引最多不能超過6個,因為索引越多,對update和insert操作也會有性能的影響,涉及到索引的新建和重建操作。
第二:建立索引的方法論為:
多數(shù)查詢經(jīng)常使用的列;
很少進(jìn)行修改操作的列;
索引需要建立在數(shù)據(jù)差異化大的列上
利用以上的基礎(chǔ)我們討論一下如何優(yōu)化sql。
先看這樣一條語句這樣的:select*fromuserswherearea=’beijing’andage=22;
如果我們是在area和age上分別創(chuàng)建索引的話,由于mysql查詢每次只能使用一個索引,所以雖然這樣已經(jīng)相對不做索引時全表掃描提高了很多效率,但是如果area,age兩列上創(chuàng)建復(fù)合索引的話將帶來更高的效率。
在使用索引字段作為條件時,如果該索引是復(fù)合索引,那么必須使用到該索引中的第一個字段作為條件時才能保證系統(tǒng)使用該索引,否則該索引將不會被使用,并且應(yīng)盡可能的讓字段順序與索引順序相一致。
例如我們建立了一個這樣的索引(area,age,salary),那么其實(shí)相當(dāng)于創(chuàng)建了(area,age,salary),(area,age),(area)三個索引,這樣稱為最佳左前綴特性。
a.ORDERBY+LIMIT組合的索引優(yōu)化
如果一個SQL語句形如:SELECT[column1],[column2],….FROM[TABLE]ORDERBY[sort]LIMIT[offset],[LIMIT];
這個SQL語句優(yōu)化比較簡單,在[sort]這個欄位上建立索引即可。
b.WHERE+ORDERBY+LIMIT組合的索引優(yōu)化
如果一個SQL語句形如:SELECT[column1],[column2],….FROM[TABLE]WHERE[columnX]=[VALUE]ORDERBY[sort]LIMIT[offset],[LIMIT];
這個語句,如果你仍然采用第一個例子中建立索引的方法,雖然可以用到索引,但是效率不高。更高效的方法是建立一個聯(lián)合索引(columnX,sort)
c.WHERE+ORDERBY多個欄位+LIMIT
如果一個SQL語句形如:SELECT*FROM[table]WHEREuid=1ORDERx,yLIMIT0,10;
對于這個語句,大家可能是加一個這樣的索引:(x,y,uid)。但實(shí)際上更好的效果是(uid,x,y)。這是由MySQL處理排序的機(jī)制造成的。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“數(shù)據(jù)庫的語句應(yīng)該如何優(yōu)化”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(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)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。