Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum sind SQL-Server-Einfügungen so langsam?

Sie führen jede Einfügung innerhalb einer eigenen Transaktion durch.

Das Beginnen und Bestätigen einer Transaktion ist sehr teuer in SQL Server .

Schließen Sie alles in einen einzigen Transaktionsblock ein:

declare @i int
set @i = 0
set nocount on
BEGIN TRANSACTION
while @i < 2000
begin
insert into testdb(testcolumn)
values (1)
set @i = @i + 1
end
COMMIT

Um Beispieldaten zu generieren, können Sie einen rekursiven CTE verwenden :

WITH    q (num) AS
        (
        SELECT  1
        UNION ALL
        SELECT  num + 1
        FROM    q
        WHERE   num < 2000
        )
INSERT
INTO    testdb(testcolumn)
SELECT  1
FROM    q
OPTION (MAXRECURSION 0)

, was schneller sein wird.