【发布时间】:2015-05-14 17:58:11
【问题描述】:
我用这个语句为excel创建一个列表
SELECT DISTINCT Year, Version
FROM myView
WHERE id <> 'old'
ORDER BY Year DESC, Version DESC
问题是执行时间超过 30 秒,因为将近 200 万行。
结果只有大约 1000 行。
为了加快执行时间,我有哪些选项可以仅提取这两列?我还需要确保识别到基础表的插入。
我需要一个新表来复制视图中的值吗?以及管理更新的触发器?
谢谢
【问题讨论】:
-
你能发布你的表定义吗?包括索引?
-
这三列
Year、Version、id是否都来自同一张表? -
既然这是我要问的一个观点,那这个观点是否引用了另一个观点?最可能的问题是 where 子句中的 nonSARGable 谓词 。无论您做什么,都会导致表/索引扫描。
-
您可以为此查询创建一个特定的索引...“Year DESC,Version DESC”上的过滤索引,其中过滤器是 id 'old' ...然后此查询将使用它索引,它会非常快。但是,该索引不会被任何其他查询使用,任何更新、插入和删除都必须更新该索引。
-
- 没有为该表定义索引(并且它不适用于该表) - 所有列都来自同一个表 - 这就是为什么我认为创建一个额外的表可能会更好对于这两列
标签: sql-server tsql select triggers sql-server-2012