【发布时间】:2012-07-10 06:13:24
【问题描述】:
所有基于 SQL 的 RDBMS(版本长达 10 年):
直接连接查询(没有提示指令)中的表顺序是否会影响最佳性能和内存管理?听说最后一个join应该是最大的表。您的数据库的查询优化器如何处理这种情况?
【问题讨论】:
-
是的,尤其是在 MySql 上。虽然在某些数据库上没关系,但我曾经将一个使用 MySql 的应用程序移植到 Postgresql,MySql 中的慢查询在 Postgresql 中变得更快。在 MySql 上,我必须做不同的加入顺序以使查询更快
-
@Yaroslav 我的问题与外部联接无关,而是与完全联接有关。
-
我的评论是轶事,但我忘了写博客。所以我只是在谷歌上搜索了一些类似的案例,这是我发现的:forums.mysql.com/read.php?24,79125,79434#msg-79434 如果您的 RDBMS 在确定连接的最佳顺序(带有较少中间行的连接)方面不是很聪明,您必须覆盖连接顺序你自己,例如dba-oracle.com/art_dbazine_oracle10g_dynamic_sampling_hint.htm 在 MySQL 中,为了遵守你加入表的顺序,你应该使用
STRAIGHT_JOIN;在 Oracle 中,你应该使用这个指令:/*+ ORDERED */ -
尽管问题被标记为“Informix”,但该线程中的大多数答案——甚至是“勾选”的答案——都特定于其他数据库技术。很奇怪。
标签: mysql sql sql-server oracle informix