1

我有一个从非常慢的视图中提取的 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
4

1 回答 1

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)
于 2012-10-12T17:24:32.593 回答