sql >> Databáze >  >> RDS >> Sqlserver

isnull vs je null

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

je ekvivalentní

where name is not null and name <> '' 

což je zase ekvivalentní

where name <> ''

(pokud název IS NULL že konečný výraz by byl vyhodnocen jako neznámý a řádek se nevrátil)

Použití ISNULL vzor bude mít za následek skenování a je méně účinný, jak lze vidět v níže uvedeném testu.

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 <> '' */

Což by vám mělo poskytnout plán provedení, který potřebujete.



  1. Jak mohu uložit velké množství dat z databáze do XML (problém s pamětí)?

  2. Připojení PHP na Linuxu k Microsoft Access na Windows Share

  3. Jak najít konkrétní řádek ve výsledku dotazu MySQL?

  4. Příkaz MySQL CASE a REGEXP