我試過搜索引擎,MSDN等。但不能任何東西。對不起,如果之前已經問過。使用T-SQL「Between」關鍵字還是使用比較運算符有什麼不同?比較T-SQL與'<' '>'運算符的性能差異?
12
A
回答
23
通過檢查兩種情況下的查詢計劃,您可以輕鬆檢查到這一點。我所知道的沒有區別。 BETWEEN和「<」之間有一個邏輯上的區別,「>」... BETWEEN是包容性的。它相當於「< =」和「=>」。
1
0
實際上。我只是試着用我的一些數據進行驗證。 BETWEEN等同於「> =」和「<」。例如:在'05/01/2010'和'05/30/2010'之間:您將只在5/1/2010 00:00:00至2010年5月29日23:59:59之間獲得數據。試着用「按時間順序排列」desc查詢你的表格,你會看到結果。
0
與使用between關鍵字相比,我對使用(> =和< =)時是否存在性能差異感興趣。 (我來自dotnet背景,並且像> =樣式運算符)。
這裏是我使用的腳本:
DECLARE
@Startdatetime datetime ,
@Diff int = 0 ,
@Addrowcount int = 1000;
SET NOCOUNT ON;
--Create a tempory table to perform our tests on
CREATE TABLE dbo.perftest(id smallint NOT NULL
IDENTITY(1 , 1)
PRIMARY KEY ,
mytext nvarchar(50)NOT NULL);
--Now add some sample rows
SET @Addrowcount = 1000;
WHILE(@Addrowcount > 0)
BEGIN
INSERT INTO dbo.perftest(mytext)
VALUES('thetext');
SET @Addrowcount = @Addrowcount - 1;
END;
SELECT @Startdatetime = GETDATE();
-- do method 1 here
SELECT mytext
FROM dbo.perftest
WHERE(id >= 100)
AND (id <= 900);
--end method1
SELECT @Diff = DATEDIFF(millisecond , @Startdatetime , GETDATE());
PRINT ':Method 1: ' + CAST(@Diff AS nvarchar(20)) + ' ms';
--reset start time
SELECT @Startdatetime = GETDATE();
--do method2 here
SELECT mytext
FROM dbo.perftest
WHERE id BETWEEN 100
AND 900;
--end method2
SELECT @Diff = DATEDIFF(millisecond , @Startdatetime , GETDATE());
PRINT ':Method 2: ' + CAST(@Diff AS nvarchar(20)) + ' ms';
結果爲:
方法1:140毫秒
方法2:70毫秒
這樣看來,使用之間的性能得到提高。
1
當人們提供代碼來做自己的測試時,你需要做一個更大的子集/重複測試來解釋被加載到內存中的索引,等等......然後再跳到結論。下面是相同的代碼具有更大的桌子和10次迭代
DECLARE
@Startdatetime datetime ,
@Diff int = 0 ,
@Addrowcount int = 1000 ,
@ptr int = 1;
SET NOCOUNT ON;
--Create a tempory table to perform our tests on
DROP TABLE dbo.perftest
CREATE TABLE dbo.perftest(id int NOT NULL
IDENTITY(1 , 1)
PRIMARY KEY ,
mytext nvarchar(50)NOT NULL);
--Now add some sample rows
SET @Addrowcount = 20000;
WHILE(@Addrowcount > 0)
BEGIN
INSERT INTO dbo.perftest(mytext)
VALUES('thetext');
SET @Addrowcount = @Addrowcount - 1;
END;
WHILE @ptr < 10 -- do this a few times to account for indexes being loaded into memory
BEGIN
SELECT @Startdatetime = GETDATE();
-- do method 1 here
SELECT mytext
FROM dbo.perftest
WHERE(id >= (100 + (@ptr * 1000)))
AND (id <= (500 + (@ptr * 1000)));
--end method1
SELECT @Diff = DATEDIFF(millisecond , @Startdatetime , GETDATE());
PRINT ':Method 1: ' + CAST(@Diff AS nvarchar(20)) + ' ms';
--reset start time
SELECT @Startdatetime = GETDATE();
--do method2 here
SELECT mytext
FROM dbo.perftest
WHERE id BETWEEN (300 + (@ptr * 1000))
AND (800 + (@ptr * 1000));
--end method2
SELECT @Diff = DATEDIFF(millisecond , @Startdatetime , GETDATE());
PRINT ':Method 2: ' + CAST(@Diff AS nvarchar(20)) + ' ms';
SET @ptr = @ptr + 1
END
爲您提供了一套完全不同的結果:
--Method 1 -- 10 ms
--Method 2 -- 33 ms
--Method 1 -- 40 ms
--Method 2 -- 26 ms
--Method 1 -- 23 ms
--Method 2 -- 23 ms
--Method 1 -- 13 ms
--Method 2 -- 16 ms
--Method 1 -- 13 ms
--Method 2 -- 20 ms
--Method 1 -- 6 ms
--Method 2 -- 16 ms
--Method 1 -- 26 ms
--Method 2 -- 16 ms
--Method 1 -- 13 ms
--Method 2 -- 13 ms
--Method 1 -- 16 ms
--Method 2 -- 13 ms
我就從這個說(仍然相當不科學)測試,沒有太大的區別無論哪種方式。
4
查詢引擎之間爲>=
和<=
(看看查詢計劃)將因此在實踐中,它們是相同的,並且在理論上>= <=
是更快,因爲引擎不會有翻譯。祝你好運,但注意不同。
我之間使用,無論如何,我覺得它讀取容易
非常複雜的查詢/嵌套視圖與比較之間的許多可能更改受益到>= <=
因爲這可能會潛在地阻止優化超時通過減少花費在重構查詢時間(只是一個理論,未經我測試&我從來沒有注意到它)
相關問題
- 1. BETWEEN運算符與> = AND AND <=:是否存在性能差異?
- 2. 組合比較運算符(<=>)和空合併運算符(??)組合左右比較運算符
- 3. NSNumber與<(少)運算符比較,而不是比較
- 4. Ruby比較運算符? ==與===
- 5. SQL之間的差異在運算符和「> =」&「<=」運算符之間
- 6. 比較方法和比較類有任何性能差異嗎?
- 7. 將字符串與>,<運算符進行比較會發生什麼? Python
- 8. 與表達式或變量比較的性能差異
- 9. 比較運算符
- 10. 比較運算符
- 11. 比較運算符
- 12. PostgreSQL多列索引加入比較(「<" and ">」)運算符
- 13. SQLITE操作「=」與「< AND >」的性能差異comapare
- 14. 差異<?>
- 15. JavaScript的比較運算符
- 16. 在MySQL和IN運算符之間有任何性能差異
- 17. 比較兩個列表<MyClass>:如何找出差異?
- 18. C++重載運算符<<和運算符>>
- 19. 與比較運算符的日期比較
- 20. 文本比較/差異算法
- 21. 比較標誌與按位運算符
- 22. 使用std :: min或ternary運算符的性能差異?
- 23. Javascript:使用邏輯運算符與比較運算符
- 24. 使用比較運算符時的MYSQL性能
- 25. Ruby運算符差異
- 26. >><<和運算符重載
- 27. C++ << >>運算符
- 28. 按位運算符「>>」和「<<」?
- 29. null與PHP < and >運算符
- 30. 與Ruby混淆<=>運算符
好點。我沒有注意到的微妙之處。 – 2009-05-28 14:59:43