sql >> Database teknologi >  >> RDS >> Sqlserver

isnull vs er null

where isnull(name,'') <> ''

svarer til

where name is not null and name <> '' 

hvilket igen svarer til

where name <> ''

(hvis navnet IS NULL det endelige udtryk vil evalueres til ukendt, og rækken returneres ikke)

Brugen af ​​ISNULL mønster vil resultere i en scanning og er mindre effektiv, som det kan ses i nedenstående test.

SELECT ca.[name],
       [number],
       [type],
       [low],
       [high],
       [status]
INTO   TestTable
FROM   [master].[dbo].[spt_values]
       CROSS APPLY (SELECT [name]
                    UNION ALL
                    SELECT ''
                    UNION ALL
                    SELECT NULL) ca 


CREATE NONCLUSTERED INDEX IX_TestTable ON dbo.TestTable(name)

GO


SELECT name FROM TestTable WHERE isnull(name,'') <> ''

SELECT name FROM TestTable WHERE name is not null and name <> ''
/*Can be simplified to just WHERE name <> '' */

Hvilket burde give dig den udførelsesplan, du har brug for.



  1. Sådan gendanner du sikkerhedskopien med et andet navn

  2. Tilpasset beregning for beløb

  3. SQL Server Genopbyg og Reorganiser Index

  4. PostgreSQL initdb (Database Initialization) på Linux