选择查询之间的速度差异

时间:2018-07-19 06:11:06

标签: sql sql-server

我有以下两个表:

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列上添加了索引。

2 个答案:

答案 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
相关问题