我有一个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
答案 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)