我在替换SQL Server 17时遇到问题:
分配数值的CASE语句 具有恒定的数值 将查询速度降低6倍以上
相当复杂的查询具有以下一般形式:
WITH CTE1 AS(
...
),
WITH CTE2 AS (
SELECT
--conditions based on below
FROM (
SELECT
--various math,
CASE
--statement assigning values to different runID combinations for samples with matching siteIDs and dates (due to the ON statement below)
ELSE NULL
....
END AS whichCombination
FROM CTE1 AS value1
JOIN CTE1 AS value2
ON (
value1.siteID = value2.siteID,
value1.date = value2.date,
value1.sampleID <> value2.sampleID
)
) AS combinations
WHERE combinations.whichCombination IS NOT NULL
)
SELECT various data
FROM dataTable
LEFT JOIN (
stuff from CTE2
) AS pairTable
ON dataTable.sampleID = pairTable.sampleID
CASE语句将对编号分配给自连接的不同行组合。然后,这仅用于选择我想要的组合。
但是,当CASE语句替换为:(1 AS whichCombination一个常量值,因此没有行分配为NULL)时,查询速度会大大降低。如果CASE WHEN 1 = 1 THEN 1使用,也会发生这种情况。
这对我来说毫无意义,因为这两种值都是:
数值的 不唯一 不是索引 唯一唯一的是,行的每个组合都被分配了一个唯一值。
SQL Server是否以某种方式将其用作加快速度的索引?
又如何在没有CASE语句的情况下复制此行为,因为此答案表明您无法为CTE创建索引?
编辑:还要注意的是,仅当包含主选择语句(最后5行)时(即如果CTE2作为主选择语句而不是bieng CTE运行),才会发生减速
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。