維尼的工作瑣事~SQL調教~in

By 維尼弘 - 2月 04, 2020



沒錯SQL小菜鳥又來了

這次遇到一個白癡錯誤~~



因為以前沒學好(根本沒在聽課的說~~

測次採的是SQL中
in 的錯誤~~

經過前大同事的指導才知道~~

原來in 會讓資料搜尋中減少效能~~

概念上就是
有一筆資料, 然後跑for迴圈 將in 的資料跑過一次

EX:
資料表A(col1,col2,col3)
A    AA    AAA
B    BB    BBB   
C    CC    CCC   

select * from A
where col3 in ('CCC','BBB')

跑法為
資料庫
1.先找到AAA,然後逐一比對CCC、BBB,沒有在換下一筆
2.找到BBB,然後比對CCC、BBB.....

不出意外其跑的次數為3*2 = 6

若改為
select * from A
wherer (col3 ='CCC' or col3='BBB' )

資料庫只跑3次,不會再跑迴圈~~

以上為我個人理解的部分

當然說in 就不用嗎?
其實還是可以用,用於快速查詢,直覺的下sql較快
但真的要用在查詢時,建議還是做個轉換!!

參考資料:

https://tomkuo139.blogspot.com/2009/08/oracle-select-sql-tuning.html

http://syunguo.blogspot.com/2013/04/sqlgroup-by-distinct.html

  • Share:

You Might Also Like

0 意見