首页 新闻 赞助 找找看

SQL Server 性能优化问题:Scan count 太高如何优化

0
悬赏园豆:100 [待解决问题]

发现一个 SQL 语句执行时 scan count 非常高:

Table 'blog_Site_Links'. Scan count 13984, logical reads 44601

SQL 语句如下:

SELECT  bc.*
FROM blog_Content bc WITH(NOLOCK)  
INNER JOIN blog_Site_Links bl WITH(NOLOCK) ON bc.ID=bl.EntryID AND bl.IsActive=1 AND bl.CategoryID=@CategoryID
WHERE bc.DateAdded>@StartDate   
ORDER BY bc.DateAdded DESC 

请问如何优化?

注:用的是 SQL Server 2016 。

dudu的主页 dudu | 高人七级 | 园豆:31075
提问于:2019-09-09 08:01
< >
分享
所有回答(4)
0

如果只是查询bc结果,用exists替换掉inner join
SELECT t1.*
FROM blog_Content t1
WHERE t1.DateAdded>@StartDate and exists(select 1 from blog_Site_Links t0 ON t0.ID=t1.EntryID AND t0.IsActive=1 AND t0.CategoryID=@CategoryID)
ORDER BY t1.DateAdded DESC

张朋举 | 园豆:1915 (小虾三级) | 2019-09-09 11:56

改用 Exists 效果一样

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2019-09-09 12:00

@dudu:
1、单表查询,慢的话,只能加索引了。DateAdded
2、关联表如果数据量太大,必然也有影响;
还是不行,就没道理了,只能远程给你看了。

支持(0) 反对(0) 张朋举 | 园豆:1915 (小虾三级) | 2019-09-09 12:10
0

可以看看连接查询的地方有没有索引

灬丶 | 园豆:6 (初学一级) | 2019-09-09 15:20

有索引

支持(0) 反对(0) dudu | 园豆:31075 (高人七级) | 2019-09-09 18:42
0

打开查询分析器,会提示你怎么做。
blog_Content 这个表是不是存了文本,二进制数据,列的数量太多,只能分表

geass.. | 园豆:1821 (小虾三级) | 2019-09-10 10:13
0

这是比较简单的一个语句,没什么复杂逻辑。把order by 排序去掉试下,对比下试下速度,如果提升明显就查出来再内存排序

村委第一书记 | 园豆:26 (初学一级) | 2019-09-10 11:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册