mysql - 没有提示指令的直接连接中表的顺序是否会影响性能?

标签 mysql sql sql-server oracle informix

所有基于 SQL 的 RDBMS'(10 年前的版本):

直接连接查询(没有提示指令)中表的顺序是否对最佳性能和内存管理有影响?听说最后的join应该是最大的表。您的数据库的查询优化器如何处理这种情况?

最佳答案

回答你的问题 - 是的,表的顺序在连接中有所不同。

你也可以让优化器知道执行计划。

ORDERED 提示使 Oracle 按照表在 FROM 子句中出现的顺序连接表。

例如,此语句将表 TAB1 连接到表 TAB2,然后将结果连接到表 TAB3:

 SELECT /*+ ORDERED */ TAB1.COL1, TAB2.COL2, TAB3.COL3
     FROM TAB1, TAB2, TAB3
    WHERE TAB1.COL1 = TAB2.COL1
         AND TAB2.COL1 = TAB3.COL1;

如果您在执行连接的 SQL 语句中省略 ORDERED 提示,优化器会选择连接表的顺序。如果您知道优化器不知道的从每个表中选择的行数,您可能希望使用 ORDERED 提示来指定连接顺序。此类信息将使您能够比优化器更好地选择内表和外表。

通常,如果您分析表,优化器会选择一个高效的星型计划。您还可以使用提示来改进计划。最精确的方法是按照索引中键的顺序对 FROM 子句中的表进行排序,大表排在最后。然后使用以下提示:

/*+ ORDERED USE_NL(FACTS) INDEX(FACTS FACT_CONCAT) */

关于mysql - 没有提示指令的直接连接中表的顺序是否会影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11407605/

相关文章:

mysql - 在另一个查询中使用表别名来遍历树

mysql - 如何获取第二个表中没有条目的记录

sql - PostgreSQL 输入结束时的语法错误

mysql - SELECT 语句将值加在一起而不是单独显示

sql - 当表仅包含过去几天时创建全月的 SQL View

sql : duplicate row and all related rows

sql-server - 使用 Apache Kafka 将数据从 MSSQL 同步到 Elasticsearch

python - SQLAlchemy - 简单的选择语句

mysql - SQL 查询没有返回任何值

php - 如何为搜索查询设置配额并避免分页占用配额