要使以下查询在sql server 2012中运行一秒钟

时间:2015-01-22 15:12:07

标签: sql-server performance

我有以下查询来检索在特定日期之前未发货的前10个订单:

select top 10 *
from
(
        select 
                o_orderkey,
                o_shippriority,
                o_orderdate,
                sum(l_extendedprice * (1-l_discount)) over (partition by l.l_orderkey,l.l_partkey,l.l_suppkey ) as potential_revenue
                from
                lineitem l
                inner join
                neworders o
                on l.l_orderkey=o.o_orderkey
                where
                l.l_shipdate > '2014-08-05' 
                and o_orderstatus ='O'

) A
order by potential_revenue desc;

Lineitem有60M记录,订单有15M记录。

l_shipdatel_orderkey是在date上分区的聚簇索引,o_orderkeyorders table的聚簇索引。我还在o-orderstatus列上创建了一个非聚集索引。该查询需要11秒才能运行,我想知道还可以采取哪些措施来提高查询性能?

1 个答案:

答案 0 :(得分:0)

尝试这些索引。

CREATE NONCLUSTERED INDEX Ix_neworders ON neworders (o_orderstatus) INCLUDE (o_orderdate,  o_shippriority);
CREATE NONCLUSTERED INDEX Ix_lineitem ON lineitem (l_extendedprice) 
INCLUDE (l_discount,  l_partkey,l_suppkey );

无论如何TOP是昂贵的操作。 当您查看解释计划时,请查看关键查找。 如果你有它们,那么尝试创建正确的索引+注意索引扫描。 尝试使用索引进行索引搜索。