11.24 不多說,乾貨。#如何提高SQL查詢的效率?#

寫在前面:本文僅僅適用於數據分析者,DBA直接無視就好。


不多說,乾貨。#如何提高SQL查詢的效率?#


1. select子句中儘量避免使用*

2. 儘量避免使用in和not in

in和not in也會導致數據庫進行全表搜索,增加運行時間。比如,我想看看第8、9個人的學號和成績,大多數同學會用這個語句:

select 學號, 成績 from 成績表 where 學號 in (8, 9)

這一類語句,優化方法如下:

select 學號, 成績 from 成績表 where 學號 between 8 and 9

3.使用limit子句限制返回的數據行數

如果前臺只需要顯示15行數據,而你的查詢結果集返回了1萬行,那麼這適合最好使用limt子句來限制查詢返回的數據行數。

4. 儘量避免使用or

or同樣會導致數據庫進項全表搜索。在工作中,如果你只想用or從幾十萬語句中取幾條出來,是非常划不來的,怎麼辦呢?下面的方法可替代or。

從成績表中選出成績是是88分或89分學生的學號:

select 學號 from 成績表 where 成績 = 88 or 成績 = 89

優化後:

select 學號 from 成績表 where 成績 = 88 union select 學號 from 成績表 where 成績 = 89

語句雖然變長了一點,但處理大量數據時,可以省下很多時間,是非常值得的。

5. where子句比較符號左側避免函數

儘量避免在where條件子句中,比較符號的左側出現表達式、函數等操作。因為這會導致數據庫引擎進行全表掃描,從而增加運行時間。

舉個例子,下圖是10名學生的成績表,老師突然發現因為參考答案出錯,給所有人都少加了5分,現在需要查詢:給每人加5分後,成績依然在90分以上的同學的學號。

按照題目的思路直接書寫,“給每人加5分後,成績90分以上”的條件很多人會這樣寫:

where 成績 + 5 > 90 (表達式在比較符號的左側)

優化方法:

where 成績 > 90 – 5(表達式在比較符號的右側)

所以,為了提高效率,where子句中遇到函數或加減乘除的運算,應當將其移到比較符號的右側。


分享到:


相關文章: