从视图优化sql查询

时间:2012-10-12 17:13:59

标签: sql sql-server

我有一个sql查询拉从一个非常非常慢的视图,我知道这可能是视图错误;但是我无法改变观点。我有这个查询,想看看是否有人有关于如何优化它的建议,以便我可以让它更快。

SELECT COUNT(id) AS recordnum, firstname, lastname 
    FROM view 
    WHERE personid=123 AND transactiondate BETWEEN '9/1/2012' AND '9/30/2012' 
    GROUP BY firstname, lastname

1 个答案:

答案 0 :(得分:4)

SELECT COUNT(id) AS recordnum, firstname, lastname 
FROM view 
WHERE personid=123 AND transactiondate BETWEEN '9/1/2012' AND '9/30/2012' 
GROUP BY firstname, lastname

考虑(personid)和/或(transactiondate)和/或(firstname,lastname)的索引,以最具选择性的为准。也就是说,如果personid将从100,000个记录中选择1个,则personid上的索引通常就足够了。如果personid + transactiondate的组合为您提供了选择性,请在两列上创建复合索引。

如果这是您执行次数最多的查询,或者您只是经常运行它,您还可以将所有列包含在索引中,例如

create index ix_basetable_1 on basetable_inside_view(personid,transactiondate)
INCLUDE(firstname,lastname,id)