Desktop
Website
Multimedia
Database
Security
Enterprise
Vraag : De eenvoudige zeer langzame Verklaring van het Tussenvoegsel
Hallo hebben de Mensen,
I een zeer eenvoudige tussenvoegselverklaring, als volgt
Insert in MyTable (StringID, StringText)
select 0, br N'123452.46093750'> UNIE
select 1, br N'468330.90625000'> UNIE
select 2, br N'152484.99609375'> UNIE
select 3, br N'476937.99609375'> UNIE
select 4, N'30 D6-5FFC'
UNIE
select 5, br N'AE79-9EED'> UNIE
select 6, br N'10.5.0.75'> UNIE
select 7, br N'00-21-9B-01-5C-C4'> UNIE
select 8, het Document Writer'< br/> UNIE
select 9, N'ActiveReports 6 '
UNIE
select 10, br N'6.0.2250.0'> UNIE
select van N'Microsoft XPS 11, br N'24'> ...... UNIE
The dragen voor 1800 verslagen, en elke verklaring is uitgebroken in partijen van 100, enkel zodat raakte ik geen grenzen op verklaringsgrootte of aantal van tussenvoegsel unions.
This 4 seconden om 1800 rijen, waarom is vergt zo langzaam dit op te nemen? (Lidstaten razen en tieren op ongeveer TPC cijfers enz., zeker kon het recentst en het grootst meer dan 450 rijen per seconde beheren!!)
The- lijst geen indexen, geen verhoudingen:
leidt tot Lijst MyTable
(
niet ongeldige StringID int.,
StringText nvarchar (4000) niet ongeldige
)
I heeft verandering gegevensbestand het registreren in „Eenvoudig“, zijn Sql 2008 ontwikkelaaruitgave die op een Kern 2.66 van de Vierling vakje met 4GB RAM in werking stellen. Niets anders loopt op die doos behalve Visuele Studio 2010.
I heeft geprobeerd“) waarden („in plaats van uitgezocht, en ik geprobeerd de nieuwe komma sql 2008 veelvoudige tussenvoegselsyntaxis - hebben alle zelfde ideeën
Any gebaseerd? Om het even wat te proberen?
Antwoord : De eenvoudige zeer langzame Verklaring van het Tussenvoegsel
Hier is wat OB vóór elke test terugstelt.
Alle tests zijn 10000 tussenvoegsels.
dbcc freeproccache
dbcc dropcleanbuffers
reeks nocount
GA
;
laat vallen lijst MyTable3
GA
Cre�ër Lijst MyTable3
(
Niet ongeldige StringID int.,
Nvarchar StringText (4000) niet verklaart nietig
)
;
=========================
test1 - unievorm, één grote verklaring (10000 ontsproten één), geproduceerd gebruikend de onderstaande en een paar handkneepjes
verklaar @i int. vastgestelde @i=1
terwijl @i <� 10001="">begint
druk „uitgezochte „+right (@i, 10) +“, varchar N '''
+convert (
(maximum), newid
())+ unie '''“;
vastgestelde @i=@i+1
eind
=========================
tussenvoegsel MyTable3
selecteer 1,
unie N'A0B8022B-CFE9-43C9-97E5-DE89822AC32F
selecteer 2,
unie N'F87C8670-1339-458E-8F1C-C2E9B717F4AA
selecteer 3, N'35
de unie van acfffc-52cf-4805-8c30-A4EB41F3A218
..........
selecteer 10000.
Tijd - 7 gedode minutes+,
=========================
test2 - unie AL vorm
=========================
Tijd - sneller dan hierboven. Toen VERSCHILLENDE de SOORT wordt niet vereist. De Unie op zijn doet verschillend
=========================
test3 - unie AL vorm, 100 per langs gescheiden partij;
=========================
Tijd - nog sneller. Elke partij wordt begaan en neemt veel geen behandeling in RAM. Voorts brengt optimizer van de Vraag veel tijd niet aan lange vragen door. QO de tijd gaat exponentieel voor lange vragen uit.
=========================
test4 - beknot lijst, opnieuw opnemen (na van test3 zonder het terugstellen)
=========================
Tijd - sneller dan 3. QO moet geen planning doen, alle 100 [statische] vragen die uit plangeheim voorgeheugen komen
=========================
test5 - het gebruiken bepaalde de parameters van tussenvoegsels. QO plant slechts één tussenvoegsel. Alle andere tussenvoegsels gaan door plan
Neemt het geproduceerde gebruiken op
verklaar @i int. vastgestelde @i=1
terwijl @i <� 101="">begint
druk „exec sp_executesql het tussenvoegselMyTable3 waarden van N '' (@a, @b) '', N '' @a int., @b nvarchar (4000) '', juiste @a='+
(@i, 10) +“
, varchar @b=N '''
+convert (
(maximum),
newid ())+ ''''
;
vastgestelde @i=@i+1
eind
=========================
Gevergde tijd - 6s! Het snelst.
===================
Conclusies
(1) Sql Optimizer van de Vraag van de Server neemt exponentieel langer om de vraagtekst langer te compileren.
(2) de grote tussenvoegselblokken die unie of waarden (), (), () gebruiken patronen zitten in een HOOP in geheugen, dan dequeued van HOOP op slecht tussenvoegsel -.
(3) de de parameters bepaalde van Vragen zijn goed. Beter als u hen groepeert in zeg 10 tussenvoegsels, maar elk tussenvoegsel zou (bij het voorbeeld hierboven) dan 20 parameters in het 10 partijtussenvoegsel vereisen.
(4) ** Geen test hierboven, maar mijn gissing ** die SP voor het tussenvoegsel gebruiken, b.v. usp_insert is @a, @b die het tussenvoegsel en uw bulkmanuscript doet van de vorm
exec usp_insert 1, N'test text';
exec usp_insert 2, N'test text';
enz.
zo snel zoals de De parameters bepaalde van tussenvoegsels zijn zal die sp_executesql gebruiken, omdat SP eens slechts en re-used# wordt gecompileerd.
# - wat de bron van parameter het snuiven problemen…. is
Andere oplossingen
Somebody verzendt emialsvorm mijn hotmailrekening
een programma probeert om het volgende e-mailbericht uit uw naam te verzenden - de Levende post van Vensters
Kleine Statische IP Bedrijfs van de Server 2008 verandering
sharepoint stichting 2010 op met 32 bits?
Word 2003 die - met lijsten, rijen, en cellen werken
Navigeer aan de pagina van een specifiek punt op een gridview
Hyperlink die het diagram/de Tekening activeren
Apple iWeb - hoe te om HTML aan Schijf de website via FTP te publiceren te bewaren of?
sql - datumformaat
Het van een lus voorzien over de tellers van googlekaarten v3