我有以下两个表:
1.cases:表-330中的列数。 表中的记录数-57981
2.accounts:表中的列数-115。 表中的记录数-2422858
现在要从两个表中选择记录,我在下面两个查询中编写了一个
1。
select a.full_name,c.name from
cases c left join accounts a on c.account_id=a.id
where c.date_entered between '2018-07-01' and '2018-07-18' and c.deleted=0
此查询为我提供了 1分钟6秒
2。
select a.full_name,c.name from
cases c,accounts a
where c.account_id=a.id and c.date_entered between '2018-07-01' and '2018-07-18' and c.deleted=0
此查询给我的结果是 1秒
有人可以告诉我为什么速度差异很大吗? 第二个查询好吗? 有没有第三种方法可以优化我的查询?
注意:在帐户表的account_id列上添加了索引。
答案 0 :(得分:2)
第一个查询产生一个显式outer join
,无论索引如何,它肯定都需要全表扫描。
第二个产生一个隐式inner join
,顺便说一下,它肯定会利用索引进行键查找或什至是哈希联接。
答案 1 :(得分:1)
左加入
select a.full_name,c.name from
cases c left join accounts a on c.account_id=a.id
where c.date_entered between '2018-07-01' and '2018-07-18' and c.deleted=0
内部联接
select a.full_name,c.name from
cases c,accounts a
where **c.account_id=a.id** and c.date_entered between '2018-07-01' and '2018-07-18' and c.deleted=0