2015-09-17 181 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有可能是一個錯誤。

我們必須在作出任何決定前檢查執行計劃。