有没有办法加快自我引用的查询

时间:2012-08-02 20:53:35

标签: mysql sql optimization query-optimization

所以假设我有这个问题:

SELECT * FROM table1 A, table1 B where A.id = B.id;

即使table1上有id的索引,它仍会扫描整个表...有没有办法加快速度,以便它不扫描整个表?

1 个答案:

答案 0 :(得分:0)

虽然我没有在您面前执行您的执行计划,但实际上这只是最有可能扫描TableA,原因是因为TableA没有其他条件。它应该在TableB此时寻求,因为它是统计的。现在,如果您要为TableA提供另一个条件,并且该条件符合索引,您会发现它没有扫描整个表。

为了进一步说明,如果TableA上的索引是查询的覆盖索引,它实际上甚至都不会读取TableA的数据页。

为了进一步说明,如果TableATableB之间存在外键约束,并且您没有从TableB读取比id字段更多的内容,那么它也永远不会读取数据页。

更进一步说,即使您确实需要来自TableB的数据,如果该数据位于索引上,它仍然不必读取数据页。

但最后,因为您选择了*,所以这不太可能是一个非常有效的查询,因为它会从两个表中选择所有列。

我希望这不会太长,但我想确保你知道我来自哪里。