iT邦幫忙

0

SQL 優化 IN 和 NOT IN 方法

sql
  • 分享至 

  • xImage

最近剛好在修改舊的程式碼

發現 SQL 語法當中有看到 IN 和 NOT IN 的用法

想說看能不能優化調整一下,但不是很理解 EXISTS 如何用在我這種SQL SCRIPT

原本的 SQL 語法

SELECT * FROM MEMBER WHERE CLASS NOT IN ('A','B')
OUT PUT => C CLASS MEMBER

像這種寫死的要怎麼改成 NOT EXISTS 呢

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
海綿寶寶
iT邦大神 1 級 ‧ 2022-07-25 13:00:12
最佳解答

寫死的要怎麼改成 NOT EXISTS 呢

https://ithelp.ithome.com.tw/upload/images/20220725/200017871cszZH0IPu.png

「優化」是另一回事
如果要優化
就避免使用 IN/NOT IN
(依此題案例,改成 NOT EXISTS 也沒什麼太大差別)

2
Luke
iT邦研究生 5 級 ‧ 2022-07-25 11:35:33

『想說看能不能優化調整一下』
請用工具去看看SQL Cost 來調整.

為什麼要用 NOT EXISTS
有比較好嗎?Cost 會降低嗎?
現在SQL 有問題?

使用 In / Not In / Exists,有可能會使查詢所需的 Cost 增加,
若真要使用,這三種方式可用 explain 進行偵測,看目前 SQL 在哪一種方式較好。

2

正常來說,使用 IN 及 EXISTS 是針對表之間的靈活應用。
但其實並不太適合你目前的情境

因為是 大表 IN 小表
小表 EXISTS 大表

但兩個都很大時....就盡量改用JOIN。

但你的是固定或是變數參數值。
正常來說只會考量用IN而已了。

我要發表回答

立即登入回答