Düzenleme İlk ona baktım beri sorunuzu güncelledik beraberdir. Bu örnekte ben kesinlikle her zaman
SELECT user_id FROM users WHERE user_email = ''
Değil
SELECT user_id FROM users WHERE LEN(user_email) = 0
İlki bir dizin kullanılacak sağlayacak kullanması gerektiğini söyleyebilirim. Bir performans optimizasyonu olarak her seferinde bazı dize mikro optimizasyonu koyacak! Bu
SELECT * into #temp FROM [master].[dbo].[spt_values]
CREATE CLUSTERED INDEX ix ON #temp([name],[number])
SELECT [number] FROM #temp WHERE [name] = ''
SELECT [number] FROM #temp WHERE LEN([name]) = 0
Yürütme Aşağıdaki kodda
Orijinal Cevap
Planları görmek için (SQL Server 2008 - Ben @8kb's answer here gelen zamanlama çerçevesi "ödünç") aldığım @stringToTest
bir dizge içerdiğinde aşağıdaki içerikten ziyade uzunluğu test etmek için hafif bir kenar. NULL olduğunda eşit zamanlamalardı. Muhtemelen herhangi bir kesin sonuç çıkarmak için yeterince test yapmadım.
Tipik bir yürütme planında, farkın göz ardı edileceğini düşünürdüm ve TSQL'de bu kadar çok dize karşılaştırması yaparsanız, büyük bir fark yaratma olasılığının yüksek olması muhtemelen sizin için farklı bir dil kullanmanız gerekir. o tablo veya dizin taramaları yol açabilecek şekilde
DECLARE @date DATETIME2
DECLARE @testContents INT
DECLARE @testLength INT
SET @testContents = 0
SET @testLength = 0
DECLARE
@count INT,
@value INT,
@stringToTest varchar(100)
set @stringToTest = 'jasdsdjkfhjskdhdfkjshdfkjsdehdjfk'
SET @count = 1
WHILE @count < 10000000
BEGIN
SET @date = GETDATE()
SELECT @value = CASE WHEN @stringToTest = '' then 1 else 0 end
SET @testContents = @testContents + DATEDIFF(MICROSECOND, @date, GETDATE())
SET @date = GETDATE()
SELECT @value = CASE WHEN len(@stringToTest) = 0 then 1 else 0 end
SET @testLength = @testLength + DATEDIFF(MICROSECOND, @date, GETDATE())
SET @count = @count + 1
END
SELECT
@testContents/1000000. AS Seconds_TestingContents,
@testLength/1000000. AS Seconds_TestingLength
Değerli espo sen neden dize programlama uygulanan ediliyor, doğru duymuş Bir sınıf ve uzunluk olarak diller bu sınıfın değişkendir. Bu nedenle, bir değişkene erişmek, cevabı almak için bir işlevi çalıştırmaktan daha hızlıdır.Sql'de boş dize veya null ile karşılaştırmadan daha yavaş olan uzunluk elde etmek için işlevi çağırmanız gerekir. –