3

我的问题是,在我们的应用程序中,我们SELECT在 MS SQL Server (2008) 数据库上执行复杂操作,该数据库由多个连接(3 个或更多)组成,用于在使用创建的表之间使用PIVOT(每个数据透视表大约有 10 000 行)。

只有 aSELECT相当快(select 从 10, 000 只返回总数中的 50 行)。但是查找所有记录的计数Count(*)或过滤要慢得多(10 000 条记录大约需要 2 秒)

有什么方法可以加快查询总数和过滤的查询速度?例如 SQL Server 中的一些缓存或优化查询?

注意:我们的 ASMX 服务对数据库进行查询。注意2:每个包含数据透视表的表都有主键类型:uniqueidentifier

基本选择如下所示:

SELECT
   Table1.[Id] AS [Id],
   Table1.[Status] AS [Status],
   Table2.[Id] AS [Id],
   Table2.[Status] AS [Status],

FROM 
(            
 -- Do PIVOT
 ) AS Table1
LEFT JOIN (            
 -- Do PIVOT
 ) AS Table2 ON Table2.xxx = Table1.yyy
 ) 

--Catch only first X records..
4

1 回答 1

0

您可能应该为每个 Pivot 使用一个视图

来自 MS 文档

在视图上创建唯一的聚集索引后,视图的结果集会立即物化并持久保存在数据库的物理存储中,从而节省了在执行时执行此昂贵操作的开销。

于 2013-08-09T07:26:30.977 回答