Pytanie : Prosty Wszywka Oświadczenie bardzo wolny

Cześć Lud,

I've dostać bardzo prosty wszywka oświadczenie, jako follows

Insert W MyTable (StringID, StringText)
select (0), N'123452.46093750'< br/> ZRZESZENIOWY
select (1), N'468330.90625000'< br/> ZRZESZENIOWY
select 2, N'152484.99609375'< br/> ZRZESZENIOWY
select 3, N'476937.99609375'< br/> ZRZESZENIOWY
select 4, N'30 D6-5FFC'< br/> ZRZESZENIOWY
select 5, N'AE79-9EED'< br/> ZRZESZENIOWY
select 6, N'10.5.0.75'< br/> ZRZESZENIOWY
select 7, N'00-21-9B-01-5C-C4'< br/> ZRZESZENIOWY
select 8, N'Microsoft XPS Dokument Writer'< br/> ZRZESZENIOWY
select 9, N'ActiveReports 6 '
ZRZESZENIOWY
select 10, N'6.0.2250.0'< br/> ZRZESZENIOWY
select 11, N'24'< br/> ......

The ZJEDNOCZENIE nieść dalej dla 1800 rejestr, i dalej oświadczenie łamać dalej w wsad 100, właśnie więc I uderzać jakaś ograniczenie na oświadczenie rozmiar lub liczba unions.

This wszywka brać 4 sekunda 1800 rząd, dlaczego być ten więc zwalniać? (MS rozprawiać na wokoło TPC postać etc, z pewnością the opóźniony i wielki móc więcej niż 450 rząd na sekunde!!)

The stół mieć żadny wskaźnik, żadny związek:

Tworzyć Stołowy MyTable
(
StringID int nieobowiązujący,
StringText nvarchar (4000) nieobowiązujący
)

I mieć zmiana the baza danych "Prosty", swój Sql 2008 przedsiębiorca budowlany wydanie bieg na Kwadrat Sedno 2.66 pudełko z 4GB BARAN. Pomysł inny biegać na ten pudełko oprócz Wizualny Studio 2010.

I próbować ") wartość (" zamiast wybiórka, i i próbować the nowy przecinek opierać się sql 2008 wieloskładnikowy wszywka składnia - jednakowy

Any pomysł? Cokolwiek?

Odpowiedź : Prosty Wszywka Oświadczenie bardzo wolny

Tutaj być co resets the DB przed tutaj test.
Wszystkie test być 10000 wszywka.

dbcc freeproccache
dbcc dropcleanbuffers
ustawiać nocount dalej
IŚĆ
;
opuszczać stołowy MyTable3
IŚĆ
      Tworzyć Stołowy MyTable3
      (
            StringID int nieobowiązujący,
            StringText nvarchar (4000) nie null
      )
;
=========================
test1 - zjednoczenie forma, jeden duży oświadczenie (10000 jeden strzelać), wytwarzać using the wytwarzać i wytwarzać manuał polepszenie

oznajmiać @i int ustalony @i=1
podczas gdy @i <� 10001="">zaczynać
drukować "wybiórka "+right (@i, 10)+", N ''' +convert (varchar (varchar), newid ())+ ''' zjednoczenie";
ustawiać @i=@i+1
końcówka
=========================

wszywka MyTable3
wybiórka (1), N'A0B8022B-CFE9-43C9-97E5-DE89822AC32F' zjednoczenie
wybiórka 2, N'F87C8670-1339-458E-8F1C-C2E9B717F4AA' zjednoczenie
wybiórka 3, N'35 ACFFFC-52CF-4805-8C30-A4EB41F3A218' zjednoczenie
..........
wybiórka 10000.

Czas - 7 minutes+, zabity

=========================
test2 - zjednoczenie WSZYSTKO tworzyć
=========================

Czas - szybki niż niż.  RODZAJ wtedy ODRĘBNY wymagać.  Zjednoczenie samodzielnie robić odrębny

=========================
test3 - zjednoczenie WSAD tworzyć, 100 na wsad, oddzielać obok;
=========================

Czas - nawet szybki.  Baran wsad popełniać i brać dużo w BARAN.  Moreover, Zapytanie optimizer wydawać dużo czas na długi zapytanie.  QO czas iść zapytanie zapytanie dla długi zapytanie.

=========================
test4 - ścięty stół, wkładać znowu (podążać od test3 bez reset)
=========================

Czas - szybki niż 3. QO musieć jakaś planowanie, wszystkie 100 [statyczny] zapytanie od plan tajna kryjówka

=========================
test5 - using wszywka wszywka. QO planować tylko jeden wszywka. Wszystkie inny wszywka iść plan
Wszywka wytwarzać using

oznajmiać @i int ustalony @i=1
podczas gdy @i <� 101="">zaczynać
drukować "exec sp_executesql N '' wszywka MyTable3 wartość (@a, @b) '', N '' @a int, @b nvarchar (4000) '', @a='+ dobrze (@i, 10)+", @b=N ''' +convert (varchar (varchar), newid ())+ '''';
ustawiać @i=@i+1
końcówka
=========================

Czas brać - 6s! Szybki.

===================

Wniosek

(1) Sql Serwer Zapytanie Optimizer brać (1) długi the długi the zapytanie tekst.

(2) Wielki wszywka blok using zjednoczenie lub wartość (), (), () wzór siedzieć w ROZSYPISKO w pamięć, then wielki od ROZSYPISKO na wszywka - bad.

(3) (3) Zapytanie być dobry.  Polepszać jeżeli ty batch w mówić 10 wszywka, ale wszywka wszywka wtedy wymagać (dla the przykład wtedy) 20 parametr w the 10 wsad wszywka.

(4) ** Żadny test żadny, ale mój domysł ** Using sp dla the wszywka, e.g usp_insert @a, @b che robić the wszywka i twój masowy pismo być the forma

exec usp_insert (1), N'test text';
exec usp_insert 2, N'test text';
etc

być równie szybko the Szybko wszywka using sp_executesql, ponieważ SP kompilować szybko tylko i re-used#.

# - che być the źródło parametr obwąchanie problem….
Inne rozwiązania  
 
programming4us programming4us