TSQL - 将数据提取到 table/view 以加快查询速度

TSQL - extract data to table/view to speed up query

我使用此语句为 excel

创建列表
SELECT DISTINCT Year, Version 
    FROM myView 
    WHERE id <> 'old' 
    ORDER BY Year DESC, Version DESC

问题是执行时间超过了30秒,因为将近200万行。

结果只有大约 1000 行。

为了加快执行时间,我有什么选择可以只提取这两列?我还需要确保识别到底层 table 的插入。

我需要一个新的 table 来复制视图中的值吗?以及管理更新的触发器?

谢谢

with cte_x
as
(SELECT Year, Version 
    FROM myView 
    WHERE id not in ('old')
    group by Year, Version)
SELECT DISTINCT Year, Version 
    FROM cte_x
        ORDER BY Year DESC, Version DESC

所以,大概有一个 table 带有 Year 和 id 作为您视图的基础。给出这个(微不足道的)例子:

CREATE TABLE myTable ([id] varchar(10), [Year] int, [Version] int);

只需在 table 上创建一个与您查询数据的方式相匹配的索引。鉴于您的查询:

SELECT DISTINCT Year, Version 
  FROM myView 
 WHERE id <> 'old' 
 ORDER BY Year DESC, Version DESC

此查询与 WHERE 和 ORDER BY 子句相匹配,应该会为您提供所需的所有性能:

IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[myTable]') AND name = N'IX_YearVersion_Filtered')
    DROP INDEX [IX_YearVersion_Filtered] ON [dbo].[myTable] WITH ( ONLINE = OFF )
GO
CREATE NONCLUSTERED INDEX [IX_YearVersion_Filtered] ON [dbo].[myTable] 
(
    [Year] DESC,
    [Version] DESC
)
WHERE ([id]<>'old')
GO