从SQL查询需要更长的时间......性能问题

时间:2014-02-17 13:22:03

标签: sql

假设我有一个像这样的Select语句......

select a,b,c 
from table1 where d='' 
union 
select a,b,c 
from table1 where d>='' and e='' order by f asc,g desc offset 0 rows 
fetch next 100 rows only 

假设我需要使用union的select,但是当我使用非主键进行排序时,即f和g需要花费大量时间来执行查询。 但是当我按主键执行订单时说a和b它执行得更快。

请建议我使用非主键顺序执行上述查询的方法。

1 个答案:

答案 0 :(得分:0)

就个人而言,我首先删除UNION,留下类似的内容:

SELECT
    a,b,c 
FROM
    table1 
WHERE 
    ISNULL(d,'') = ''
    OR ((NOT ISNULL(d,'') = '') AND e='')
ORDER BY 
    f ASC
    , g DESC
OFFSET 0 rows FETCH NEXT 100 ROWS ONLY

然后我会查看分配给数据库的索引,并可能将fg添加为索引,如果您对索引没有信心,我建议您执行(插入搜索)此处的引擎名称)可以查找合适的文章,甚至可以查看其他Stack Overflow问题,例如this one。如果您具备该功能,则应考虑使用SQL事件探查器来确定索引将使数据库受益的位置并提高其性能。

另一件值得关注的事情是分页方法的效率,如果您只想要前100个结果,可以执行SELECT TOP 100...之类的操作,或者您可以查看this article详细说明效率分页。我自己没有使用过OFFSET n ROWS SELECT NEXT 100 ROWS ONLY,但使用了ROW_NUMBER()OVER()(请参阅here)并且自己没有太多问题。