Postgresql
具有 LIMIT 的不同優先級偽列解決方案的性能
我想知道在 stackoverflow 上的問題的答案中提供的解決方案的相對性能,我決定執行一些測試。
給定一組優先級遞減的條件,OP 希望獲得第一個匹配行。兩種解決方案都涉及一個偽列,但一個(我的)涉及多個一起編輯的
SELECT
語句UNION ALL
,而另一個則建構了一個CASE
表達式。我分享我的結果,希望有人會覺得這很有用。
你的測試設計有缺陷。您正在測試不正確的結果。
我為您所指的 SO 上的問題添加了答案。
在您的CASE 版本中,您不能添加
ORDER BY col1, col2
. 必須是ORDER BY precedence
。但這仍然是不正確的。您必須將各個條件的分數相加才能首先獲得滿足最多條件的ORDER BY
行*。*同樣,您的UNION ALL 版本會產生不正確的結果。
然而,這些似乎都沒有必要,有一個更簡單、更快的解決方案
UNION ALL
。請參閱我對 SO question 的回答或使用sqlfiddle玩