有两个查询:
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";在执行过程中,内存利用率是否有足够的差异,哪一个不那么贪婪?请证明你的答案。
发布于 2013-04-22 21:48:32
在类似这样的简单select中,查询优化器应该将两个查询优化为相同的代码。
哪个查询更贪婪取决于您的索引。
如果在Y.id上有索引,但在X.text上没有索引,bot查询将执行相同的操作。
如果在Y.id上没有索引,在X.text上也没有索引,你就得走运了。如果MySQL进行了正确的优化,那么第一个查询可能会更快,因为它会在连接之前应用where (这将是一个嵌套循环连接)。
如果在Y.id和X.text上有and索引,则第一个查询会更快,因为它可以利用这两个索引。它将首先应用where子句,然后执行索引连接。
基本规则:不要在JOIN子句的前导表(X)上应用where条件。一定要在join子句中包含连接表(Y)的where条件(尤其是在执行左连接时)。
https://stackoverflow.com/questions/16148544
复制相似问题