簡體   English   中英

使用 CURSOR 會提高在 SQL 中使用 PIVOT 查詢的性能/速度嗎?

[英]Will the use of CURSOR improve the performance / speed of querying using PIVOT in SQL?

新手在 SQL 中的 DB 的EAV(實體-屬性-值)model上。

只是背景:我正在使用SQL Server 2016 使用 EAV 是工作中的一種要求,所以我正在學習一步一步地做。

我最近學習了如何執行動態PIVOT以在 EAV 表中返回800 多行200 多列

在此處查看詳細信息: 使用 PIVOT 在 SQL 服務器中將 200 多行轉換為列

成功返回了我需要的數據,但性能速度太慢了——查詢大約需要 30 分鍾。 順便說一句,我使用的代碼如下:

declare @pivot_col varchar(max);
declare @sql varchar(max);

select @pivot_col = STUFF( 
                             ( SELECT ',' + CAST([Col_Name] AS VARCHAR(max) ) AS [text()]  
                             FROM ( select distinct [Col_Name] from tbl_Values ) A 
                             ORDER BY [Col_Name] FOR XML PATH('')), 1, 1, NULL
                          );

set @sql = 'SELECT * 
            FROM ( SELECT [Row_ID], [Col_Name], [Col_Value] FROM tbl_Values ) AS a 
            PIVOT (
                    MAX([Col_Value])
                    FOR [Col_Name] in (' +  @pivot_col + ' )
                  ) AS p 
            ORDER BY [Row_ID]';

exec ( @sql );

我正在嘗試將CURSOR與此結合,但並沒有走得太遠。 在我對 go 進行更多研究之前,您能否提供輸入,說明它在性能/速度方面是否有任何區別?

謝謝!

找到了解決我的 PIVOT 查詢性能不佳的解決方案:有人告訴我在我的表中的 Row_ID 列上創建一個聚集索引。 我運行了下面的查詢:

CREATE CLUSTERED INDEX IX_tbl_Values_Row_ID  
ON dbo.tbl_Values (Row_ID);   
GO  

我對我的問題的查詢之前需要 30 分鍾才能加載,現在只運行了 6 秒。 感謝@MohitShrivastava 的提示! 絕對有效。

在創建聚集索引之前,我也提到了這一點:
https://docs.microsoft.com/en-us/sql/relational-databases/indexes/create-clustered-indexes?view=sql-server-ver15

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM