【发布时间】:2012-09-02 13:02:11
【问题描述】:
我有 2 个表,其中有几个相同的字段需要在 JOIN 条件下链接。例如。在每个表中都有字段:P1,P2。我想编写以下连接查询:
SELECT ... FROM Table1
INNER JOIN
Table2
ON Table1.P1 = Table2.P1
OR Table1.P2 = Table2.P2
OR Table1.P1 = Table2.P2
OR Table1.P2 = Table2.P1
如果我有巨大的表,这个请求会执行很多时间。
我试图测试仅具有一个条件的查询请求将持续多长时间。首先,我以这种方式修改了表格,所有来自 P2 和 P1 的数据都作为新行复制到了 Table1 和 Table2 中。所以我的查询很简单:
SELECT ... FROM Table1 INNER JOIN Table2 ON Table1.P = Table2.P
结果更令人惊讶:执行时间从数小时(第一种情况)减少到 2-3 秒!
为什么会如此不同?这是否意味着复杂的条件总是会降低性能?我该如何改善这个问题?可能是 P1,P2 索引会有所帮助吗?我想保持第一个数据库模式,而不是移动到一个字段 P。
【问题讨论】:
-
加入条件的
ORs 应该是AND还是故意的? -
看起来是故意的。匹配是 Table1 的 P1 或 P2 等于 table2 的 P1 或 P2
标签: sql sql-server performance inner-join