gpt4 book ai didi

sql-server - select 1 和 select * 哪个更好来检查记录的存在?

转载 作者:行者123 更新时间:2023-12-02 22:35:29 25 4
gpt4 key购买 nike

在以下情况下哪个更好。

1.

IF EXISTS(SELECT * FROM Table WHERE ID = 3)
BEGIN
-------
END

对比

2.

IF EXISTS(SELECT 1 FROM Table WHERE ID = 3)
BEGIN
-------
END

或者两者相同?

最佳答案

EXISTS 将检查集合中是否存在任何记录。因此,如果您从 100 万条记录中进行 SELECT,或者从 1 条记录中进行 SELECT(假设使用 TOP 1),它们将具有相同的结果和相同的性能,甚至相同的执行计划。(为什么?)因为存在不会等待 100 万条记录扫描完成(或 1 条记录扫描完成)。每当它在集合中找到一条记录时,它都会返回结果 TRUE(在这种情况下,无论您使用 * 或列名,都将具有相同的性能结果)。

USE pubs
GO

IF EXISTS(SELECT * FROM dbo.titleauthor)
PRINT 'a'

IF EXISTS(SELECT TOP 1 * FROM dbo.titleauthor)
PRINT 'b'

下面是这些查询的执行计划(因为我有屏幕尺寸问题,我已经裁剪了它的图像) enter image description here enter image description here

但是当您使用如下查询时,这种情况和性能甚至执行计划将完全改变(我不知道为什么要使用这个查询!):

USE pubs
GO

IF EXISTS(SELECT * FROM dbo.titleauthor)
PRINT 'a'

IF EXISTS(SELECT 1 )
PRINT 'b'

在这种情况下,由于SQL Server不需要在第二个查询中执行任何扫描操作,因此执行计划将更改如下: enter image description here enter image description here

关于sql-server - select 1 和 select * 哪个更好来检查记录的存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26798285/

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