gpt4 book ai didi

sql - 检查 IS NOT NULL 很慢

转载 作者:行者123 更新时间:2023-12-04 13:45:24 25 4
gpt4 key购买 nike

我有以下问题:当我执行SQL语句时

-- CTE
WITH My_CTE AS
(
SELECT [table_a].[ID]
,[view_b].[val]
FROM [table_a]
LEFT JOIN [view_b] ON [a].[ID] = [b].[fk]
)
-- query with "is not null"
SELECT * FROM My_CTE WHERE val IS NOT NULL

执行需要 8 秒。在这种情况下,这非常慢(没有 NULL 检查,查询返回 461 行,而使用 NULL 检查,查询返回 414 行,这并不多)。

我试图通过使用表变量来提高速度:
-- declare table variable
DECLARE @test1 TABLE (ID int not null, val int null);

-- CTE
WITH My_CTE AS
(
SELECT [table_a].[ID]
,[view_b].[val]
FROM [table_a]
LEFT JOIN [view_b] ON [a].[ID] = [b].[fk]
)
-- Fill table variable
INSERT INTO @test1 SELECT * FROM My_CTE

-- query with "is not null"
SELECT * FROM @test1 WHERE val IS NOT NULL

此处执行在不到 1 秒内完成 - 这是预期的行为。

但问题是我不能在 View 中使用表变量——上面的 SQL 语句应该稍后集成到 View 中。

我的问题是:
  • 原代码这么慢的原因是什么?
  • 有没有什么方法可以在不使用表变量的情况下提高速度?
  • 最佳答案

    您是否坚持使用该 CTE?

    SELECT [table_a].[ID], [view_b].[val]
    FROM [table_a]
    JOIN [view_b]
    ON [view_b].[fk] = [table_a].[ID]
    AND [view_b].[val] IS NOT NULL

    [view_b].[val] 上的索引可能会有所帮助

    关于sql - 检查 IS NOT NULL 很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36717939/

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