MySQL资源利用率优化

时间:2013-04-22 13:38:34

标签: mysql select query-optimization

有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";

执行期间内存利用率是否有足够的差异,哪一个不那么贪心?请证明你的答案。

1 个答案:

答案 0 :(得分:0)

在这样的简单选择中,查询优化器将两个查询优化为相同的代码。

哪个查询更贪婪取决于您的索引。

如果 Y.id 上有索引但 X.text 上没有索引,则bot查询将执行相同的操作。

如果 Y.id 上没有索引而 X.text 上没有索引,那么你必须幸运。如果MySQL正确优化,第一个查询可能会更快,因为它应用了连接之前的位置(这将是一个嵌套的循环连接)。

如果Y.id和X.text上有和索引,第一个查询会更快,因为它可以使用两个索引。它将首先应用where子句,然后执行索引连接。

基本规则:不要应用JOIN子句中前导表(X)上的条件。请在join子句中包含连接表(Y)的条件(特别是在执行左连接时)。