Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql FROM条款中表格的排列/顺序是否对提高性能有任何影响?_Sql_Database_Postgresql - Fatal编程技术网

Sql FROM条款中表格的排列/顺序是否对提高性能有任何影响?

Sql FROM条款中表格的排列/顺序是否对提高性能有任何影响?,sql,database,postgresql,Sql,Database,Postgresql,一般来说,FROM子句中表的排列或顺序在提高查询性能方面有什么不同吗?我指的是最小的桌子和最大的桌子 任何不同的经验/想法/意见/因素也将受到赞赏 在我的例子中,我们使用的是PostgreSQL v8.2.3。您是否使用类似于“从表1、表2中选择”的内容? 这些表是“隐式”交叉连接的,所以我认为这无关紧要 我要做的第一件事是使用EXPLAIN测试两个可能的查询,看看是否有任何区别?(通用SQL建议,而不是Postgre特定的) 它不应该有什么区别——优化器应该基于它所拥有的信息来构建一个计划,而

一般来说,FROM子句中表的排列或顺序在提高查询性能方面有什么不同吗?我指的是最小的桌子和最大的桌子

任何不同的经验/想法/意见/因素也将受到赞赏


在我的例子中,我们使用的是PostgreSQL v8.2.3。

您是否使用类似于“从表1、表2中选择”的内容? 这些表是“隐式”交叉连接的,所以我认为这无关紧要

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

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

它不应该有什么区别——优化器应该基于它所拥有的信息来构建一个计划,而SQL通常是这样设计的:优化器可以自由地重新排序联接、条件检查等,只要结果相同

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

对于内部联接,它不应该有任何区别-优化器将以尽可能多的不同顺序生成执行联接的计划(最多可达from子句中的geqo_阈值表)


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

如果从foo、bar、baz编写
,则不会有任何区别。如果从foo-JOIN-bar编写
,则连接baz…
(内部联接),则如果元素少于,则没有什么区别;否则连接顺序是固定的,您可以使用该顺序手动优化这些内容(但这很少需要)。对于外部联接,联接顺序在编写时是固定的,因为这会影响结果。

Offtopic:Version 8.2.3已经有4年的历史了,落后了16个版本。您必须进行一些维护。更新到8.2.19并不是什么大问题,只需这样做。我同意。PostgreSQL planner足够聪明,可以选择正确的“顺序”基于统计数据的表。对于外部联接,它当然会产生差异(但结果也会产生差异),感谢您让我知道查询规划中存在
geqo(遗传查询优化器)