FROM子句中表的排列/顺序是否会改善性能?

时间:2011-01-04 11:55:39

标签: sql database postgresql

一般来说,FROM子句中表的排列或顺序是否会在提高查询性能方面有所作为?通过安排我的意思是最小的桌子和最大的桌子。

也欢迎任何不同的经验/想法/意见/因素。

就我而言,我们使用的是PostgreSQL v8.2.3。

4 个答案:

答案 0 :(得分:4)

对于内部连接,它应该没有任何区别 - 优化器将生成计划以尽可能多的不同顺序进行连接(直到中的geqo_threshold表来自子句。

外连接不是对称的,因此语句中的顺序很重要(尽管实际的执行顺序仍由服务器决定)。

答案 1 :(得分:2)

您使用的是“SELECT FROM table1,table2”吗? 这些表是“隐式”交叉连接的,所以我认为这不重要。

我要做的第一件事是使用EXPLAIN测试两个可能的查询,看看是否有任何区别?

答案 2 :(得分:0)

(通用SQL建议,而不是Postgre特定的)

不应该有所作为 - 优化器应该根据它可用的信息构建一个计划,而SQL通常被设计为优化器可以自由重新排序连接,条件检查等,只要结果相同。

特定查询可能会导致特定优化器出现问题(对于某个数据库,服务器状态,产品版本等),但遇到这种情况应该很少见。

答案 3 :(得分:0)

如果你写FROM foo, bar, baz然后没有,它没有什么区别。如果您编写FROM foo JOIN bar ... JOIN baz ...(内部联接),那么如果您的join_collapse_limit元素少于{{3}},那么它就没有区别;否则,连接顺序是固定的,您可以使用它来手动优化这些事情(但很少需要)。对于外连接,连接顺序在写入时是固定的,因为这会影响结果。