-1

当我输入查询时:

SELECT A.T1, B.T2, from A, B where A.T3 = B.T3 and A.T4 = B.T4

mysql挂起。但是,当我摆脱其中一个约束时:

SELECT A.T1, B.T2, from A, B where A.T3 = B.T3

mysql 几乎立即返回结果。为什么是这样?

4

2 回答 2

1

您正在以非常缓慢和低效的方式执行此操作。它与 AND 子句本身无关,而与表的设计方式以及您尝试执行查询的方式有关。

尝试以下方式:

SELECT A.T1, B.T2
FROM A
JOIN B ON B.T3 = A.T3 AND A.T4 = B.T4 

此外,为了进一步提高性能,请将列最多的表放在 FROM 子句中,而不是 JOIN 中。

此外,由于它是一组如此庞大的表,您应该考虑对它们进行索引。

CREATE INDEX index_name
ON A (T4)
GO
CREATE INDEX index_name2
ON B (T4)
GO

您只需要创建一次索引!您无需在每次运行查询时都执行此操作。 一般来说,一旦你创建了索引,你就不需要再担心它了。

有关索引的更多信息:http ://en.wikipedia.org/wiki/Database_index

于 2012-06-01T21:32:38.193 回答
0

最常见的是,当这种情况发生时,它与约束本身无关,而是与约束与索引的关系有关。查看关于表上已定义索引的 WHERE 子句。WHERE 子句的顺序也会产生影响。
如果可以,请尝试从 SQL-1 类型的 JOIN 转向更可见和更灵活的 SQL-2 类型。请参阅 madburn 的回答。

于 2012-06-01T21:42:47.090 回答