gpt4 book ai didi

sql - 如何有效地从 View 中的另一个表中查找常量值(仅一次)?

转载 作者:行者123 更新时间:2023-12-04 18:31:57 24 4
gpt4 key购买 nike

我有一个 View 需要查找配置值并将其作为 View 结果每一行中的列之一返回。该值在 SELECT 期间本质上是一个常量(实际上,通常连续数月保持不变,并且对于每个客户来说肯定是不同的)。这是一个人为的例子:

CREATE VIEW Baz
AS
SELECT foo,
(SELECT [Value] FROM [Config] WHERE [Key] = N'MyKey') AS ConstantValue,
bar
FROM myTable

问题在于,SQL 计划显示正在为表中的每一行查找值。这是一种浪费,绝对是计划中的“热点”。我希望它只查找一次值,然后在每一行中使用它。

现在,在这个人为的例子中,计划没有显示它,但在我制定的每一个计划中,无论我如何尝试获得该常量值(使用 WITH CTE,将值交叉应用到 SELECT 的结果中,等等.) 该计划始终显示该值的索引查找每行发生一次,而不是一次 TOTAL。

我无法对该值进行硬编码,因为它是一个可以并且确实会随着时间变化的配置值,并且对于每个客户数据库来说肯定是独一无二的。

我展示了多达 40% 的查询时间(在估计和实际计划中)仅用于这一查找。这样做一次将是一个重要的优化。有任何想法吗?

请参阅下面的计划部分:

Note the index Seek on SystemConfig

最佳答案

将表达式移至 from条款。它只会被评估一次:

CREATE VIEW Baz AS
SELECT t.foo, k.ConstantValue, t.bar
FROM myTable t CROSS JOIN
(SELECT [Value] as ConstantValue FROM [Config] WHERE [Key] = N'MyKey') k;

关于sql - 如何有效地从 View 中的另一个表中查找常量值(仅一次)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com