小编tes*_*est的帖子

过滤时Sql视图慢的可能原因

我在 Sql Server 2008 中有一个视图,当只执行一个:

SELECT * FROM [Table]
Run Code Online (Sandbox Code Playgroud)

将返回大约 40000 行乘 130 列。以下是 6 次运行时的客户端统计信息(平均大约 7 秒):

客户统计(未过滤)

让我们假设这些时间都很好,当应用过滤器时问题就出现了。以下是 6 次运行时的客户端统计信息(平均大约 6 秒):

客户端统计(过滤)

有一些事情令人讨厌/令人沮丧:

  1. 时差平均只有1300ms左右。
  2. 过滤后的版本中仅返回 16 行。
  3. 我正在过滤的列是一个 int 列,它具有适当的索引。
  4. 过滤后的 SQL 看起来像:

    SELECT * FROM [Table] Where [IntColumn] = 15 -- returns 16 rows
    
    Run Code Online (Sandbox Code Playgroud)

我来找你们是因为我不知道为什么过滤后的版本可能需要这么长时间。SQL 引擎从执行开始就找到这 16​​ 行,然后计算/查找 130 列的值应该非常简单。我的问题真的是:

  1. 什么会导致这种情况?
  2. 我应该寻找什么来尝试解决这个问题?

以下是匿名执行计划(.zip 中的 .sqlplan):

  1. 匿名 Sql 计划 (Zippyshare)
  2. 匿名 Sql 计划 (Dropbox)

sql-server-2008 sql-server

1
推荐指数
1
解决办法
2万
查看次数

标签 统计

sql-server ×1

sql-server-2008 ×1