Omu*_*Omu 11 sql sql-server performance
我只是想知道SQL(特别是SQL Server)的速度有多快.
我可以有一个类型为Date的可空列,并将其与之比较NULL
,或者我可以有一个不可为空的Date列和一个单独的bit
列,并将该bit
列与1
/ 进行比较0
.
与bit
列的比较会更快吗?
Mar*_*ith 13
为了检查IS NULL
SQL Server 列实际上只是检查了一点.为每一行存储了一个NULL BITMAP,指示每列是否包含NULL.
Cod*_*uth 10
I just did a simple test for this:
DECLARE @d DATETIME
,@b BIT = 0
SELECT 1
WHERE @d IS NULL
SELECT 2
WHERE @b = 0
Run Code Online (Sandbox Code Playgroud)
The actual execution plan results show the computation as exactly the same cost relative to the batch.
Maybe someone can tear this apart, but to me it seems there's no difference.
MORE TESTS
SET DATEFORMAT ymd;
CREATE TABLE #datenulltest
(
dteDate datetime NULL
)
CREATE TABLE #datebittest
(
dteDate datetime NOT NULL,
bitNull bit DEFAULT (1)
)
INSERT INTO #datenulltest ( dteDate )
SELECT CASE WHEN CONVERT(bit, number % 2) = 1 THEN '2010-08-18' ELSE NULL END
FROM master..spt_values
INSERT INTO #datebittest ( dteDate, bitNull )
SELECT '2010-08-18', CASE WHEN CONVERT(bit, number % 2) = 1 THEN 0 ELSE 1 END
FROM master..spt_values
SELECT 1
FROM #datenulltest
WHERE dteDate IS NULL
SELECT 2
FROM #datebittest
WHERE bitNull = CONVERT(bit, 1)
DROP TABLE #datenulltest
DROP TABLE #datebittest
Run Code Online (Sandbox Code Playgroud)
dteDate IS NULL
result:
bitNull = 1
result:
OK, so this extended test comes up with the same responses again.
We could do this all day - it would take some very complex query to find out which is faster on average.
归档时间: |
|
查看次数: |
2337 次 |
最近记录: |