Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

isnull срещу е null

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

е еквивалентен на

where name is not null and name <> '' 

което от своя страна е еквивалентно на

where name <> ''

(ако името IS NULL този краен израз ще се изчисли като неизвестно и редът няма да бъде върнат)

Използването на ISNULL ще доведе до сканиране и е по-малко ефективен, както може да се види в теста по-долу.

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

Което трябва да ви даде плана за изпълнение, от който се нуждаете.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвам ROW_NUMBER()?

  2. Как да промените всички Sql колони от един тип данни в друг

  3. Предупреждение:Нулевата стойност се елиминира от агрегат или друга операция SET в Aqua Data Studio

  4. 5 Навици за наблюдение на база данни на успешните администратори на база данни

  5. SQL 2005 - Търсене на съхранени процедури за текст (Не целият текст се търси)