sql 一个字段在另外一个表没出现_都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的...
引言
數(shù)據(jù)庫的性能優(yōu)化技術(shù)一直是個(gè)老生常談的問題,不管是MySQL、SQL Server還是Oracle。
對(duì)于我們IT開發(fā)人員和運(yùn)維人員,掌握常用的SQL 優(yōu)化語句是非常必要的,它可以使你的工作變得“事半功倍”,會(huì)為你帶來很多便利和節(jié)約很多時(shí)間。
接下來,我將帶領(lǐng)你們認(rèn)識(shí)以下的常用優(yōu)化語句。
1. SQL語句要一致,避免出現(xiàn)大小寫
如果讓你看上面兩條SQL語句,你是不是覺得它們是一樣的?
但是對(duì)于數(shù)據(jù)庫軟件在搜索時(shí),可就不一樣了。他會(huì)認(rèn)為是兩句SQL語句,因此要進(jìn)行兩次解析,生成兩段執(zhí)行代碼。
因此,我們程序員在開發(fā)時(shí)要注意保證相同的SQL語句在其他地方也有要完全一致,多個(gè)空格、逗號(hào)都不行。
2. 正確使用like模糊查詢,避免全表掃描
對(duì)于上面的模糊查詢,如like 后面的“%chicken%”,因?yàn)?chicken 前面存在了%,那么程序就得對(duì)整個(gè)表進(jìn)行掃描,耗費(fèi)時(shí)間,資源。所以,在非必要的情況下,請(qǐng)不要在關(guān)鍵字前面加 %。
3. where 語句中請(qǐng)不要出現(xiàn)對(duì)null的判斷,這樣會(huì)導(dǎo)致引擎放棄索引進(jìn)而進(jìn)行全表掃描,辦法是用0來替換null。
4. 限制性使用 count(*)
以上語句中,使用count(*),就會(huì)對(duì)全表進(jìn)行查詢。多次一舉,還降低數(shù)據(jù)庫性能。
5. where 多條件查詢時(shí),將數(shù)量少的放在前面
上圖中,第一條SQL語句 性別為1 的很多,先選擇出sex =1的,然后再對(duì)剩下的數(shù)據(jù)根據(jù)name 字段查詢,這樣的效率很低。
而第二條SQL 語句 先對(duì)那么字段進(jìn)行篩選,剩下的數(shù)據(jù)就變得很少了,再根據(jù)sex=1,這樣效率很高,數(shù)據(jù)庫執(zhí)行也很快。
6. 不要一味地追求 Select *
第一句SQL語句, select * 會(huì)增加數(shù)據(jù)查詢表的時(shí)間,因?yàn)樗枰猽ser 這個(gè)表中所有的數(shù)據(jù)都給你查詢出來,另外查詢出來的數(shù)據(jù)傳遞給你也是要耗費(fèi)時(shí)間的。
而第二句SQL語句,則定位很精準(zhǔn)。不必要把表中不需要的數(shù)據(jù)查詢出來,效率高,執(zhí)行速度快。
7. 合理使用索引,不要出現(xiàn)以下操作
- 索引字段上面不要出現(xiàn) where !=或者是 where >,< 等這樣的操作符;
- 索引字段上面不要出現(xiàn)類型轉(zhuǎn)換的問題,(比如字段要求的是BOOL類型,而你傳入的參數(shù)卻是String類型);
上述操作會(huì)導(dǎo)致索引失效,進(jìn)而會(huì)使數(shù)據(jù)庫查詢變成了 全表查詢。
8. 對(duì)于SQL語句要學(xué)會(huì)拆分法
當(dāng)一個(gè)SQL語句過于冗余、雜亂時(shí),嵌套了多級(jí)查詢,其實(shí)這樣也會(huì)降低SQL的性能問題。對(duì)于此問題,應(yīng)該懂得拆分SQL語句,用多個(gè)SQL語句完成那個(gè)復(fù)雜的嵌套的SQL語句,程序速度會(huì)變快。
9. 多使用 not exist 而非 not in
對(duì)于第二個(gè)SQL語句,使用了 not in 會(huì)對(duì)內(nèi)外表都進(jìn)行了全表查詢,沒有用到了索引; 而對(duì)于 not exist 利用到了索引,索引效率會(huì)高。
10、OR 不要想當(dāng)然的就使用
對(duì)于上述兩條SQL語句,表明上看兩者的執(zhí)行效率應(yīng)該差不多。其實(shí)天壤之別,or執(zhí)行的是全表查詢,而 union利用的是索引查詢,后者效率要高的多。
結(jié)論
從上述總結(jié)的SQL語句優(yōu)化方法可以看得出來:
- 查詢的時(shí)候要盡量使用數(shù)據(jù)庫引擎索引;
- 還有就是寫的查詢語句條件盡量簡單明了,不要冗余復(fù)雜
- 理解各個(gè)關(guān)鍵詞的作用,并且不要使用錯(cuò)誤的SQL語句,反而會(huì)是累贅。
總結(jié)
以上是生活随笔為你收集整理的sql 一个字段在另外一个表没出现_都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 额头黑怎么去除
- 下一篇: linux pxe安装mysql_搭建P