2015-09-17 138 views
0

假设我有[User]表,并且我想检查电子邮件是否存在于该表中。以下两个查询之间是否有区别?哪一个执行速度快,为什么?SELECT查询的性能检查表中是否存在记录

选项1

DECLARE @EXIST as bit 

SELECT TOP 1 @EXIST = 1 
FROM [dbo].[User] 
WHERE UserEmail = N'[email protected]' 

选项2

DECLARE @EXIST as bit 
SELECT @EXIST = 1 
FROM [dbo].[User] 
WHERE UserEmail = N'[email protected]' 

我认为选择1可能是因为TOP 1的速度更快,但不能完全确定,因为我不是SQL专家。

+0

很容易,只要看执行计划 – lad2025

+1

添加这对您的测试: 'IF EXISTS(SELECT 1从[DBO] [用户] 其中useremail = N'[email protected]')SET @EXIST = 1'。 –

+0

TOP 1可能需要排序。它也将取决于用户/用户电子邮件列上的索引。除此之外,那里的数据库类型不会有太大的改进。 – Pieter21

回答

1

您可以使用Exists子句,因为它专门用于存在检查。

IF EXISTS(SELECT 1 FROM FROM [dbo].[User] WHERE UserEmail = N'[email protected]') SET @EXIST = 1 

如果您打算只选择之间的2个选项,然后去选择-1,因为如果你的表包含给定的电子邮件重复的记录时,我们选择的选项-2有可能是一个错误。

我们必须在作出任何决定前检查执行计划。