Postgresql

具有 LIMIT 的不同優先級偽列解決方案的性能

  • January 16, 2013

我想知道在 stackoverflow 上的問題的答案中提供的解決方案的相對性能,我決定執行一些測試。

給定一組優先級遞減的條件,OP 希望獲得第一個匹配行。兩種解決方案都涉及一個偽列,但一個(我的)涉及多個一起編輯的SELECT語句UNION ALL,而另一個則建構了一個CASE表達式。

我分享我的結果,希望有人會覺得這很有用。

你的測試設計有缺陷。您正在測試不正確的結果。

我為您所指的 SO 上的問題添加了答案。

在您的CASE 版本中,您不能添加ORDER BY col1, col2. 必須是ORDER BY precedence。但這仍然是不正確的。您必須將各個條件的分數相加才能首先獲得滿足最多條件的ORDER BY行*。*

同樣,您的UNION ALL 版本會產生不正確的結果。

然而,這些似乎都沒有必要,有一個更簡單、更快的解決方案UNION ALL。請參閱我對 SO question 的回答或使用sqlfiddle

引用自:https://dba.stackexchange.com/questions/33007