我正在分析一些我刚刚在工作中继承的代码,我有一个问题:
这是我继承的片段:
Select sum(a.claim) as total
from claims c
inner join claim_entries ce
on c.id = ce.claim_id
and ce.deleted = 0
and ce.dos >='2012-03-01'
where c.deleted = 0
and c.document_type = 0
我重写了代码,因此ON子句位于WHERE子句中:
Select sum(a.claim) as total
from claims c
inner join claim_entries ce
on c.id = ce.claim_id
where c.deleted = 0
and c.document_type = 0
and ce.deleted = 0
and ce.dos >='2012-03-01'
原始代码运行了36秒,而我的重写运行了9秒。将过滤器放在INNER JOIN的JOIN子句中,而不是放在WHERE中,有什么区别吗?我只在使用LEFT JOINS时才这样做,却从未见过INNER JOIN的事情。我也不确定为什么原始文件比重写文件花费4倍的时间,除非在运行原始文件后缓存了数据。
答案 0 :(得分:3)
使用内部联接,将条件放在ON
子句或WHERE
子句中都没有关系。执行计划将是相同的。使用EXPLAIN
进行确认。
执行时间上的差异可能是由于缓存效果所致。重复测试几次以获得可靠的结果。