为什么MYSQL在处理“AND”语句时这么慢

时间:2012-06-01 21:24:54

标签: mysql

当我输入查询时:

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几乎立即返回结果。这是为什么?

2 个答案:

答案 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

您只需要创建一次索引!每次运行查询时都不需要这样做。通常,一旦创建索引,就不必再担心它了。

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

答案 1 :(得分:0)

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