sql優(yōu)化
關(guān)于sql優(yōu)化每窖,面試中經(jīng)常被問道变姨,由于本人也是小白一枚,請大家對我寬容點(diǎn)下面是我整理的一些sql優(yōu)化措施疼进,不多說直接上干貨:
1.查詢語句中盡量不要使用*兰迫,具體到列名信殊,即使是查詢?nèi)孔詈靡惨獙懗鋈苛忻?/p>
2.模糊查詢中除非必要,否則不要在關(guān)鍵詞前加%
3.當(dāng)你確定查詢到的數(shù)據(jù)只有一條時汁果,請?jiān)诓樵冋Z句后面加上limit 1涡拘,因?yàn)镸ySQL數(shù)據(jù)庫引擎會在找到一條數(shù)據(jù)后停止搜索,而不是繼續(xù)往后查少下一條符合記錄的數(shù)據(jù)据德。
4.對經(jīng)常查詢用到的列建立索引鳄乏,但是不能對可以為空(null)列建立索引,即使對該列建立索引也不會提高性能
5.用EXISTS替代IN棘利、用NOT EXISTS替代NOT IN
6.避免在索引列中使用is null 和is not null 汞窗,數(shù)據(jù)類型轉(zhuǎn)換,計(jì)算操作
7.盡量避免在 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
8.?盡量多用commit語句提交事務(wù)仲吏,可以及時釋放資源、解鎖蝌焚、釋放日志空間裹唆、減少管理花費(fèi)
9.除非卻有需要,否則應(yīng)盡量避免使用臨時表只洒,相反许帐,可以使用表變量代替,因?yàn)楸碜兞狂v扎在內(nèi)存中毕谴,因此速度比臨時表更快成畦,臨時表駐扎在TempDb數(shù)據(jù)庫中,因此臨時表上的操作需要跨數(shù)據(jù)庫通信涝开,速度自然慢
10.除非必要循帐,否則盡量少使用子查詢,這樣會降低查詢效率
最后還有一些數(shù)據(jù)庫的分庫分表舀武,還有主從備份拄养,讀寫分離就不一一贅述了,當(dāng)然主要原因還是我不會银舱,有興趣的同學(xué)可以上網(wǎng)上查詢瘪匿,如果我以后學(xué)了跛梗,可以寫個簡單的。數(shù)據(jù)庫的sql優(yōu)化肯定還有好多我沒提到的棋弥,這里僅僅是面試時經(jīng)常用的核偿,希望對大家有幫助!