有2个查询:
select * from X inner join Y on X.id=Y.id where X.text = "ABC";
和
select * from X inner join Y on X.id=Y.id and X.text = "ABC";
执行期间内存利用率是否有足够的差异,哪一个不那么贪婪?请证明你的答案。
有2个查询:
select * from X inner join Y on X.id=Y.id where X.text = "ABC";
和
select * from X inner join Y on X.id=Y.id and X.text = "ABC";
执行期间内存利用率是否有足够的差异,哪一个不那么贪婪?请证明你的答案。
在像这样的简单选择中,查询优化器应该将两个查询优化为相同的代码。
哪个查询更贪婪取决于您的索引。
如果 Y.id 上有索引但 X.text 上没有索引,机器人查询将执行相同的操作。
如果Y.id上没有索引并且X.text上没有索引,你必须走运。如果 MySQL 正确优化,第一个查询可能会更快,因为它在连接之前应用 where(这将是一个嵌套循环连接)。
如果 Y.id 和 X.text 上有和索引,第一个查询会更快,因为它可以利用这两个索引。它将首先应用 where 子句,然后执行索引连接。
基本规则:不要对 JOIN 子句中的前导表 (X) 应用 where 条件。务必在连接子句中包含连接表 (Y) 的 where 条件(尤其是在进行左连接时)。