我有 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。