1

所以假设我有这个查询:

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

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

4

1 回答 1

0

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

更进一步,如果索引TableA是查询的覆盖索引,它实际上甚至不会读取TableA.

更进一步的是,如果 and 之间存在外键约束TableATableB并且您没有从TableBid 字段中读取任何内容,那么它也永远不会读取数据页。

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

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

我希望这不是太啰嗦,但我想确保你知道我来自哪里。

于 2012-08-03T16:07:49.603 回答