具有 LIMIT 的不同优先级伪列解决方案的性能

dez*_*zso 5 postgresql performance index execution-plan query-performance

我想知道关于stackoverflow问题的答案中提供的解决方案的相对性能,我决定运行一些测试。

在给定一组优先级递减的条件的情况下,OP 希望获得第一个匹配行。两种解决方案都涉及一个伪列,但一个(我的)涉及将多个SELECT语句UNION ALL组合在一起,而另一个则构造了一个CASE表达式。

我分享我的结果,希望有人会发现这很有用。

Erw*_*ter 5

你的测试设计有缺陷。您正在测试不正确的结果。

在你所指的 SO 上添加了一个答案。

在您的CASE 版本中,您不能添加ORDER BY col1, col2. 必须是ORDER BY precedence。但它仍然是不正确的。你将不得不ORDER BY得分个别条件得到满足行最条件第一。

同样,您的UNION ALL 版本会产生不正确的结果。

然而,这一切似乎都没有必要,有一个更简单、更快的解决方案UNION ALL。参考我对SO问题的回答或使用sqlfiddle

  • 这正是我发布此内容的原因:收集周围更有经验的人的批评。让我只纠正你一件事:在最初的问题中,最好的结果不一定是最符合条件的结果。关于其他要点,我将不得不重新运行更正后的查询。再次感谢您指出这些! (2认同)