相关疑难解决方法(0)

在SQL中发现了很大的性能差异(1小时到1分钟).你能解释一下原因吗?

对于100万条记录,以下查询分别在标准机器上花费70分钟和1分钟.可能的原因是什么?

查询[01:10:00]

SELECT * 
FROM cdc.fn_cdc_get_net_changes_dbo_PartitionTest(
    CASE WHEN sys.fn_cdc_increment_lsn(0x00)<sys.fn_cdc_get_min_lsn('dbo_PartitionTest')        
        THEN sys.fn_cdc_get_min_lsn('dbo_PartitionTest')        
        ELSE sys.fn_cdc_increment_lsn(0x00) END
    , sys.fn_cdc_get_max_lsn()
    , 'all with mask') 
WHERE __$operation <> 1
Run Code Online (Sandbox Code Playgroud)

修改查询[00:01:10]

DECLARE @MinLSN binary(10)
DECLARE @MaxLSN binary(10)
SELECT @MaxLSN= sys.fn_cdc_get_max_lsn()
SELECT @MinLSN=CASE WHEN sys.fn_cdc_increment_lsn(0x00)<sys.fn_cdc_get_min_lsn('dbo_PartitionTest')     
        THEN sys.fn_cdc_get_min_lsn('dbo_PartitionTest')        
        ELSE sys.fn_cdc_increment_lsn(0x00) END

SELECT * 
FROM cdc.fn_cdc_get_net_changes_dbo_PartitionTest(
        @MinLSN, @MaxLSN, 'all with mask') WHERE __$operation <> 1
Run Code Online (Sandbox Code Playgroud)

[改性]

我尝试使用类似的函数重新创建场景,以查看是否针对每一行评估参数.

CREATE FUNCTION Fn_Test(@a decimal)RETURNS TABLE
AS
RETURN
(
    SELECT @a Parameter, Getdate() Dt, PartitionTest.*
    FROM PartitionTest
);

SELECT * FROM Fn_Test(RAND(DATEPART(s,GETDATE())))
Run Code Online (Sandbox Code Playgroud)

但是我在38秒内处理了一百万条记录的"参数"列获得了相同的值.

sql sql-server performance function cdc

0
推荐指数
1
解决办法
675
查看次数

标签 统计

cdc ×1

function ×1

performance ×1

sql ×1

sql-server ×1