SQL 加入条件顺序表现
SQL join conditions order performance
JOIN条件顺序影响性能吗?我有两个表 A 和 B。我正在尝试这样加入它们:
SELECT * FROM A
INNER JOIN B on B.ID_A = A.ID
在这种情况下,firebird 使用 NATURAL
计划而不是使用外键。
SELECT * FROM A
INNER JOIN B on A.ID = B.ID_A
效果不错。
这正常吗?
我不熟悉 firebird,但通常对于内部连接来说并不重要。
在新版本的 Oracle 或 SQLServer 或 MySQL 或 Postgresql 中,它不会影响性能。我们有解释计划检查数据库选择正确的加入方式你可以试试。
这个查询没问题,但要确保 B.ID_A
是索引,(为了快速性能)
不要在 sql 查询中使用 *
,只使用必需的列...
你的问题是关于性能的,所以我在想,你有非常大的数据..
所以必须在您的查询中使用 LIMIT
...
例子
SELECT A.ID, A.column1, B.column2, FROM A
INNER JOIN B on B.ID_A = A.ID LIMIT 0,100
我猜你使用的 Firebird 版本早于 2.5.4(可能是 2.5.3)。它在 2.5.4 中修复了错误 http://tracker.firebirdsql.org/browse/CORE-4530。请升级到 Firebird 2.5.5 并检查您的问题是否消失。
JOIN条件顺序影响性能吗?我有两个表 A 和 B。我正在尝试这样加入它们:
SELECT * FROM A
INNER JOIN B on B.ID_A = A.ID
在这种情况下,firebird 使用 NATURAL
计划而不是使用外键。
SELECT * FROM A
INNER JOIN B on A.ID = B.ID_A
效果不错。
这正常吗?
我不熟悉 firebird,但通常对于内部连接来说并不重要。 在新版本的 Oracle 或 SQLServer 或 MySQL 或 Postgresql 中,它不会影响性能。我们有解释计划检查数据库选择正确的加入方式你可以试试。
这个查询没问题,但要确保 B.ID_A
是索引,(为了快速性能)
不要在 sql 查询中使用 *
,只使用必需的列...
你的问题是关于性能的,所以我在想,你有非常大的数据..
所以必须在您的查询中使用 LIMIT
...
例子
SELECT A.ID, A.column1, B.column2, FROM A
INNER JOIN B on B.ID_A = A.ID LIMIT 0,100
我猜你使用的 Firebird 版本早于 2.5.4(可能是 2.5.3)。它在 2.5.4 中修复了错误 http://tracker.firebirdsql.org/browse/CORE-4530。请升级到 Firebird 2.5.5 并检查您的问题是否消失。