gpt4 book ai didi

sql - T-SQL 条件查询

转载 作者:行者123 更新时间:2023-12-02 00:57:44 24 4
gpt4 key购买 nike

查询这样的东西时性能有差异吗?

查询 1:

SELECT * FROM Customer WHERE Name=Name

查询 2:

SELECT * FROM Customer

我会在条件全选中使用它

SELECT * FROM Customer 
WHERE Name = CASE WHEN @QueryAll='true' THEN Name ELSE @SearchValue END

如果查询 1 和查询 2 没有性能问题,我认为这是一个简短的代码:

IF @QueryAll='true'
SELECT * FROM Customer
ELSE
SELECT * FROM Customer WHERE Name=@SearchValue

最佳答案

你应该阅读 Dynamic Search Conditions in T‑SQL Erland Sommarskog 着。

如果您使用 SQL Server 2008 或更高版本,则使用 OPTION(RECOMPILE) 并像这样编写查询:

SELECT * 
FROM Customer
WHERE
(Name = @SearchValue OR @QueryAll='true')
OPTION (RECOMPILE);

我通常为 @SearchValue 传递 NULL 以指示应忽略此参数,而不是使用单独的参数 @QueryAll。在此约定中,查询变为:

SELECT * 
FROM Customer
WHERE
(Name = @SearchValue OR @SearchValue IS NULL)
OPTION (RECOMPILE);

编辑

有关详细信息,请参阅上面的链接。简而言之,OPTION(RECOMPILE) 指示 SQL Server 在每次运行时重新编译查询的执行计划,并且 SQL Server 不会缓存生成的计划。重新编译还意味着任何变量的值都有效地内联到查询中并且优化器知道它们。

因此,如果 @SearchValueNULL,优化器会足够聪明地生成计划,就好像查询是这样的:

SELECT * 
FROM Customer

如果 @SearchValue 有一个非 NULL 值 'abc',优化器会足够聪明地生成计划,就好像查询是这样的:

SELECT * 
FROM Customer
WHERE (Name = 'abc')

OPTION(RECOMPILE) 的明显缺点是增加了重新编译的开销(通常大约几百毫秒),如果您经常运行查询,这可能会很重要。

关于sql - T-SQL 条件查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32495268/

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