当我输入查询时:
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几乎立即返回结果。这是为什么?
答案 0 :(得分: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
您只需要创建一次索引!每次运行查询时都不需要这样做。通常,一旦创建索引,就不必再担心它了。
答案 1 :(得分:0)
最常发生这种情况时,它与约束本身无关,而是与约束与索引的关系。查看有关表上已定义索引的WHERE子句。 WHERE子句的顺序也可以有所不同 如果可以的话,尝试从SQL-1类型的JOIN转向更加可见和灵活的SQL-2类型。请参阅madburn的回答。