减少逻辑读取
bring down logical reads
我正在使用 Whosebug2013 数据库,我的查询是
select p.CreationDate, p.title,
c.Text,
c.Score
from comments c join posts p on c.PostId = p.id
where p.CreationDate between ‘2008-08-29 00:00:00’ and ‘2008-09-02 23:59:58’ order by c.score desc
在创建索引之前,我得到了以下结果 - 执行时间为 18 分 26 秒
(2055 rows affected)
Table ‘Worktable’. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table ‘Workfile’. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table ‘Comments’. Scan count 1, logical reads 1028410, physical reads 4, read-ahead reads 1027512, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table ‘Posts’. Scan count 1, logical reads 4184557, physical reads 0, read-ahead reads 4178310, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
然后我去创建了以下索引
create index forcomments on dbo.comments(postid asc , Score desc) include (text)
create index forposts on dbo.posts(creationdate asc) include (title)
创建这个之后,查询的性能是惊人的。总执行时间现在为 0 秒。
(2055 rows affected)
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Comments'. Scan count 4536, logical reads 19562, physical reads 0, read-ahead reads 1, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Posts'. Scan count 1, logical reads 26, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
I want to ask how can we bring the logical reads even lower than we
already have?
几点 - 统计数据是最新的,在执行计划分析中没有观察到不正确的基数。
I want to ask how can we bring the logical reads even lower than we already have?
唯一的方法是使用索引视图来具体化连接。
我正在使用 Whosebug2013 数据库,我的查询是
select p.CreationDate, p.title,
c.Text,
c.Score
from comments c join posts p on c.PostId = p.id
where p.CreationDate between ‘2008-08-29 00:00:00’ and ‘2008-09-02 23:59:58’ order by c.score desc
在创建索引之前,我得到了以下结果 - 执行时间为 18 分 26 秒
(2055 rows affected)
Table ‘Worktable’. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table ‘Workfile’. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table ‘Comments’. Scan count 1, logical reads 1028410, physical reads 4, read-ahead reads 1027512, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table ‘Posts’. Scan count 1, logical reads 4184557, physical reads 0, read-ahead reads 4178310, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
然后我去创建了以下索引
create index forcomments on dbo.comments(postid asc , Score desc) include (text)
create index forposts on dbo.posts(creationdate asc) include (title)
创建这个之后,查询的性能是惊人的。总执行时间现在为 0 秒。
(2055 rows affected)
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Comments'. Scan count 4536, logical reads 19562, physical reads 0, read-ahead reads 1, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Posts'. Scan count 1, logical reads 26, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
I want to ask how can we bring the logical reads even lower than we already have?
几点 - 统计数据是最新的,在执行计划分析中没有观察到不正确的基数。
I want to ask how can we bring the logical reads even lower than we already have?
唯一的方法是使用索引视图来具体化连接。