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

Jaké jsou výhody použití syntaxe Row Constructor v příkazu T-Sql insert?

Ano, mezi:

je poměrně velký rozdíl ve výkonu
declare @numbers table (n int not null primary key clustered);

insert into @numbers (n)
values (0)
     , (1)
     , (2)
     , (3)
     , (4);

a

declare @numbers table (n int not null primary key clustered);

insert into @numbers (n) values (0);
insert into @numbers (n) values (1);
insert into @numbers (n) values (2);
insert into @numbers (n) values (3);
insert into @numbers (n) values (4);

Skutečnost, že každý jednotlivý insert výpis má svou vlastní implicitní transakci, která to zaručuje. Můžete si to snadno dokázat zobrazením plánů provádění pro každý příkaz nebo načasováním provádění pomocí set statistics time on; . S „nastavením“ a „rozbouráním“ kontextu pro každou jednotlivou vložku jsou spojeny fixní náklady a druhý dotaz musí tuto pokutu zaplatit pětkrát, zatímco první ji zaplatí pouze jednou.

Metoda seznamu je nejen efektivnější, ale můžete ji také použít k vytvoření odvozené tabulky:

select *
from (values
    (0)
  , (1)
  , (2)
  , (3)
  , (4)
) as Numbers (n);

Tento formát se pohybuje kolem limitu 1 000 hodnot a umožňuje se připojit a filtrovat seznam před jeho vložením. Možná si také všimnete, že nejsme vázáni na insert prohlášení vůbec! Jako de facto tabulku lze tento konstrukt použít kdekoli, kde by byl platný odkaz na tabulku.



  1. XAMPP Spustit automaticky při spuštění Windows 7

  2. Hierarchický seznam typů událostí spouštění v SQL Server 2017

  3. Tabulka SQL Server Temp vs proměnná tabulky

  4. Paměťově efektivní způsob čtení dat BLOB v C#/SQL 2005