所以假设我有这个查询:
SELECT * FROM table1 A, table1 B where A.id = B.id;
即使 table1 上的 id 上有索引,它仍然会扫描整个表...有没有办法加快速度,使其不扫描整个表?
所以假设我有这个查询:
SELECT * FROM table1 A, table1 B where A.id = B.id;
即使 table1 上的 id 上有索引,它仍然会扫描整个表...有没有办法加快速度,使其不扫描整个表?
虽然我面前没有你的执行计划,但这实际上只是TableA
最有可能的扫描,原因是你没有其他条件TableA
。它应该TableB
在这个时候寻找,只是因为它是统计的。现在,如果您要为 提供另一个条件TableA
,并且该条件满足索引,您会发现它没有扫描整个表。
更进一步,如果索引TableA
是查询的覆盖索引,它实际上甚至不会读取TableA
.
更进一步的是,如果 and 之间存在外键约束TableA
,TableB
并且您没有从TableB
id 字段中读取任何内容,那么它也永远不会读取数据页。
更进一步,即使您确实需要来自 的数据TableB
,如果该数据在索引上,它仍然不必读取数据页。
但最后,因为您选择的是*
,所以这不太可能是一个非常有效的查询,因为它从两个表中选择所有列。
我希望这不是太啰嗦,但我想确保你知道我来自哪里。