sql >> Database >  >> RDS >> Sqlserver

isnull vs is null

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

is gelijk aan

where name is not null and name <> '' 

wat op zijn beurt gelijk is aan

where name <> ''

(indien naam IS NULL die laatste uitdrukking zou evalueren tot onbekend en de rij niet geretourneerd)

Het gebruik van de ISNULL patroon resulteert in een scan en is minder efficiënt, zoals te zien is in de onderstaande 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 <> '' */

Dat zou je het uitvoeringsplan moeten geven dat je nodig hebt.



  1. Best practices voor het ontwerpen van meertalige databases

  2. Alleen toetsenbordnavigatie gebruiken in Word, Excel en PowerPoint (deel 2:dialoogvensters)

  3. Combineer geneste lus-query's met bovenliggend array-resultaat - pg-promise

  4. Rails-modellering:HABTM converteren naar has_many :through