我正在嘗試運行一個簡單的查詢,但它沒有回傳任何結果并且無休止地顯示“正在執行查詢”。
這是我的代碼:
select *
from ALERTTRAN_01
where PARENT_ALERT_ID not in (select PARENT_ALERT_ID
from nonbulkclosealert)
但是當我將代碼更改為
select *
from ALERTTRAN_01
where PARENT_ALERT_ID in (select PARENT_ALERT_ID
from nonbulkclosealert)
注意not into in,然后它運行良好。
任何幫助表示贊賞。
uj5u.com熱心網友回復:
使用IN和的性能NOT IN可能有點棘手,因為在與記錄匹配之前,首先將子查詢中的所有資料加載到記憶體中。所以如果有更多的行,它會消耗性能。所以嘗試使用EXISTS和NOT EXISTS代替,像這樣
select *
from ALERTTRAN_01
where not EXISTS (
select PARENT_ALERT_ID
from nonbulkclosealert WHERE PARENT_ALERT_ID = ALERTTRAN_01.PARENT_ALERT_ID
)
這里有一些有用的鏈接,它們將解釋EXISTSoverIN
https://www.sqlservercentral.com/blogs/not-exists-vs-not-in
https://www.red-gate.com/hub/product-learning/sql-prompt/think-using-not-exists-instead-not-subquery
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/340096.html
標籤:sql sql-server 查询语句 查询优化
下一篇:將多列轉換為單列
