【发布时间】:2016-07-09 02:54:06
【问题描述】:
在两个子查询(或一个表和一个子查询)之间的连接操作中,最好在内部查询中指定 LIMIT 子句而不是在外部查询中指定(因为顺序将决定 DBMS 将必须迭代检查 where 子句)?喜欢:
((
SELECT id
FROM Table1
WHERE score>=100
LIMIT 10)
AS A NATURAL JOIN Table2
))
会比
((
SELECT id
FROM Table1
WHERE score>=100)
AS A NATURAL JOIN Table2
))
LIMIT 10
我的想法是,在最后一个查询中,DBMS 首先必须迭代(全表或索引)Table1 中 score>=100 的所有行,这些行可以在它们的公共列上映射到 Table2(可以是任何数字行),只有在这之后它才会截断到只有 10 行,而在第一个查询中,它只会扫描到从 Table1 中找到满足 where 子句并且可以映射到 Table2 的 10 行,然后停止.. ..
【问题讨论】: