目前有一個形式的查詢:
SELECT myFunc(col1) FROM myTable;
myFunc回傳一個bool值。是否可以短路查詢執行,以便查詢將在第一次結束時myFunc回傳具有值的行true?執行查詢的順序無關緊要,只需發現函式的一次執行是true.
EXISTS不起作用,因為它只測驗是否有回傳的行;但myFunc總是回傳一個值(true或false),因此EXISTS對識別上述停止條件沒有幫助。
uj5u.com熱心網友回復:
嘗試這個
select mf
from (SELECT myFunc(col1) as mf FROM myTable) t
where mf limit 1;
我認為優化器將扁平化查詢并完全滿足您的需求。
或者exists按照@JasonGoemaat 的建議使用:
select exists
(
select from myTable where myFunc(col1)
);
uj5u.com熱心網友回復:
我認為exists在子查詢上使用where 子句和限制應該非常有效:
SELECT EXISTS (SELECT 1 FROM myTable WHERE myFunc(col1) LIMIT 1);
如果您不介意在沒有myFunc回傳實體時檢查空結果集,true那么您可以不進行exists檢查。
我很想知道myfunc(col1)在視圖中作為計算欄位并從視圖中選擇是否更快;但是由于您沒有說明myFunc正在做什么,因此在沒有測驗的情況下很難確定哪種方法最好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/348637.html
標籤:sql PostgreSQL
上一篇:是否可以在目錄下創建模式?
