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

Způsobuje zalamování sloupců s možnou hodnotou Null v ISNULL prohledávání tabulek?

Ano, způsobuje skenování tabulek. (i když se zdá, že se optimalizuje, pokud sloupec ve skutečnosti nemá hodnotu null)

SR0007 pravidlo je extrémně špatná obecná rada, protože činí predikát neměnitelným a znamená, že jakékoli indexy ve sloupci budou k ničemu. I když ve sloupci není žádný index, může se stát, že odhady mohutnosti budou nepřesné a ovlivní ostatní části plánu.

Jeho kategorizace v Microsoft.Performance kategorie je docela zábavná, protože se zdá, že ji napsal někdo, kdo nerozumí výkonu dotazů.

Tvrdí, že zdůvodnění je

Zatímco samotný výraz se vyhodnotí jako unknown váš kód vrátí zcela deterministický výsledek, jakmile pochopíte, že jakýkoli = , <> , > , < atd. srovnání s NULL vyhodnotit jako Unknown a že WHERE klauzule vrací pouze řádky, kde je výraz vyhodnocen jako true .

Je možné, že znamenají, pokud ANSI_NULLS je vypnutý, ale příklad, který uvádějí v dokumentaci WHERE ISNULL([c2],0) > 2; vs WHERE [c2] > 2; by toto nastavení stejně neovlivnilo. Toto nastavení

Prováděcí plány zobrazující skeny vs hledání nebo níže

CREATE TABLE #foo
  (
     x INT NULL UNIQUE
  )

INSERT INTO #foo
SELECT ROW_NUMBER() OVER (ORDER BY @@SPID)
FROM   sys.all_columns

SELECT *
FROM   #foo
WHERE  ISNULL(x, 10) = 10

SELECT *
FROM   #foo
WHERE  x = 10

SELECT *
FROM   #foo
WHERE  x = 10
        OR x IS NULL 




  1. chyba s postgresql datababse :Běží server lokálně a přijímá připojení na soketu domény Unix /var/run/postgresql/.s.PGSQL.5432?

  2. Vložte obrázek do databáze postgresql

  3. Dotaz MySQL pro počítání jedinečných domén z pole e-mailové adresy

  4. Více hodnot v jednom sloupci nebo ne?