gpt4 book ai didi

sql - 在 SQL Server 中 not(columnName ='value' ) 和 columnName< >'value' 之间有什么区别吗?

转载 作者:行者123 更新时间:2023-12-01 09:35:32 25 4
gpt4 key购买 nike

在 SQL Server where 子句中,是否编码 not(columnName='value') 有什么区别吗?或 columnName<>'value' ?

我在考虑性能。

有人告诉我,当使用 Not() 时,它可能不使用它可能与 <> 一起使用的索引。

最佳答案

最好的办法是检查执行计划。当我在 SQL Server 2008 中测试以下内容时,它们给出了相同的计划(并且都被转换为 2 个范围搜索。因此 <> x 被转换为 > x< x )

CREATE TABLE T
(
C INT,
D INT,
PRIMARY KEY(C, D)
)

INSERT INTO T
SELECT 1,
1
UNION ALL
SELECT DISTINCT 2,
number
FROM master..spt_values

SELECT *
FROM T
WHERE NOT ( C = 2 )

SELECT *
FROM T
WHERE ( C <> 2 )


  |--Nested Loops(Inner Join, OUTER REFERENCES:([Expr1010], [Expr1011], [Expr1012]))
|--Merge Interval
| |--Sort(TOP 2, ORDER BY:([Expr1013] DESC, [Expr1014] ASC, [Expr1010] ASC, [Expr1015] DESC))
| |--Compute Scalar(DEFINE:([Expr1013]=((4)&[Expr1012]) = (4) AND NULL = [Expr1010], [Expr1014]=(4)&[Expr1012], [Expr1015]=(16)&[Expr1012]))
| |--Concatenation
| |--Compute Scalar(DEFINE:([Expr1005]=NULL, [Expr1006]=CONVERT_IMPLICIT(int,[@1],0), [Expr1004]=(10)))
| | |--Constant Scan
| |--Compute Scalar(DEFINE:([Expr1008]=CONVERT_IMPLICIT(int,[@1],0), [Expr1009]=NULL, [Expr1007]=(6)))
| |--Constant Scan
|--Clustered Index Seek(OBJECT:([test].[dbo].[T].[PK__T__B86D18326339AFF7]), SEEK:([test].[dbo].[T].[C] > [Expr1010] AND [test].[dbo].[T].[C] < [Expr1011]) ORDERED FORWARD)

Plan

关于sql - 在 SQL Server 中 not(columnName ='value' ) 和 columnName< >'value' 之间有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8816658/

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