Question : Rapport simple d'insertion très lent

Salut les gens, le

I ont un rapport très simple d'insertion, comme suit le

Insert dans le
select 0, le
select 1, le
select 2, le
select 3, le
select 4, le
select 5, le
select 6, le
select 7, le
select 8, le
select 9, le
select 10, le
select de MyTable (StringID, StringText) des SYNDICATS du Br/> de N'123452.46093750'< des SYNDICATS du Br/> de N'468330.90625000'< des SYNDICATS du Br/> de N'152484.99609375'< des SYNDICATS du Br/> de N'476937.99609375'< des SYNDICATS du Br/> de N'30 D6-5FFC'< des SYNDICATS du Br/> de N'AE79-9EED'< des SYNDICATS du Br/> de N'10.5.0.75'< des SYNDICATS du Br/> de N'00-21-9B-01-5C-C4'< des SYNDICATS du Br/> de Writer'< de document de Ne Microsoft XPS des SYNDICATS du
de N'ActiveReports 6 ' des SYNDICATS du Br/> de N'6.0.2250.0'< 11, SYNDICATS du

The du Br/> de N'24'< ...... continuent pour 1800 disques, et chaque rapport est-il éclaté dans des séries de 100, est-ce que juste ainsi je ne frappe pas des limites sur la taille de rapport ou nombre d'insertion d'unions.

This 4 secondes pour insérer 1800 rangées, pourquoi ceci prend est si lent ? (Les harangues de milliseconde sur environ TPC figure etc., sûrement le plus en retard et le plus grand pourrait contrôler plus de 450 rangées par seconde ! !)la table du

The n'a aucun index, aucuns rapports : le

créent le Tableau MyTable
(
StringID international non nul,
de
StringText

I ont le changement la base de données noter à « simple », sa édition 2008 de réalisateur de SQL fonctionnant sur une boîte du noyau 2.66 de quadruple avec le RAM 4GB. Rien d'autre fonctionne sur cette boîte à moins que le studio visuel 2010.

I aient essayé ") des valeurs (" au lieu de choisi, et de moi ont essayé la syntaxe multiple d'insertion de SQL basée nouvelle par virgule 2008 - toutes les mêmes idées du

Any ? Quelque chose à essayer ?
class= de

Réponse : Rapport simple d'insertion très lent

Voici ce qui remet à zéro le DB avant chaque essai.
Tous les essais sont 10000 insertions.

freeproccache de dbcc
dropcleanbuffers de dbcc
placer le nocount dessus
ALLER
;
laisser tomber la table MyTable3
ALLER
      Créer le Tableau MyTable3
      (
            StringID international non nul,
            Nulle nvarchar de StringText (4000) pas
      )
;
=========================
test1 - forme des syndicats, un grand rapport (10000 un tiré), produit using les coups secs ci-dessous et quelques manuels

déclarer le @i international @i=1 réglé
tandis que le @i <� 10001="">commencent
imprimer « choisissent « +right (@i, 10)+ », ''' +convert (varchar (maximum), le newid de N ())+ union de ''' » ;
placer @i=@i+1
extrémité
=========================

insérer MyTable3
choisir 1, union de N'A0B8022B-CFE9-43C9-97E5-DE89822AC32F
choisir 2, union de Ne F87C8670-1339-458E-8F1C-C2E9B717F4AA
choisir 3, union de N'35 ACFFFC-52CF-4805-8C30-A4EB41F3A218
..........
choisir 10000.

Temps - 7 minutes+, tués

=========================
test2 - union TOUTE LA forme
=========================

Temps - plus rapidement qu'en haut.  La SORTE alors DISTINCTE n'est pas exigée.  L'union seule fait un distinct

=========================
test3 - union TOUTE LA forme, 100 par groupe, séparé près ;
=========================

Temps - encore plus rapidement.  Chaque groupe est commis et ne prend pas beaucoup la manipulation dans le RAM.  D'ailleurs, l'optimiseur de question ne passe pas beaucoup d'heure sur de longues questions.  Le temps de QO monte exponentiellement pour de longues questions.

=========================
test4 - la table tronquée, s'insèrent encore (suivant de test3 sans remise)
=========================

Le temps - plus rapidement que 3. QO ne doit faire aucune planification, chacune des 100 [questions de charge statique] venant de la cachette de plan

=========================
test5 - using les insertions paramétrisées. QO prévoit seulement une insertion. Toutes autres insertions vont par plan
Insertions produites using

déclarer le @i international @i=1 réglé
tandis que le @i <� 101="">commencent
imprimer le « exec les valeurs de l'insertion MyTable3 de sp_executesql N '' (@a, @a international, @b de @b) '', N '' nvarchar (4000) '', @a='+ bien (@i, 10)+ », ''' +convert (varchar (maximum), le newid de @b=N ())+ '''' ;
placer @i=@i+1
extrémité
=========================

Temps pris - 6s ! Le plus rapidement.

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

Conclusions

(1) l'optimiseur de question de serveur de SQL prend exponentiellement plus longtemps pour compiler plus le texte de question est long.

(2) les grands blocs d'insertion using l'union ou les valeurs (), (), () des modèles se reposent dans un TAS dans la mémoire, puis retiré de la file d'attente du TAS sur l'insertion - le mauvais.

(3) les questions paramétrisées sont bonnes.  Améliorer si vous les traitez en lots dans disons 10 insertions, mais chaque insertion exigerait alors (pour l'exemple ci-dessus) 20 paramètres dans l'insertion 10 en lots.

(4) ** Aucun essai ci-dessus, mais ma conjecture ** Using un PS pour l'insertion, par exemple @a d'usp_insert, le @b qui fait l'insertion et votre manuscrit en bloc n'est de la forme

usp_insert 1, text'; d'exec de Ne test
usp_insert 2, text'; d'exec de Ne test
etc.

être aussi rapidement que les insertions paramétrisées using le sp_executesql, parce qu'un PS est compilé une fois seulement et re-used#.

# - qui est la source des problèmes de reniflement de paramètre….
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us