Was ist der beste Weg zu schaffen und eine Zahlen-Tabelle Stack-Überlauf auffüllen

hier sind einige Code-Beispiele aus dem Internet und von Antworten auf diese Frage getroffen.

Für jede Methode habe ich den Original-Code geändert, so dass jeder verwendet die gleichen Tabellen- und Spalten: NumbersTest und Anzahl, mit 10.000 Zeilen oder so nah, dass wie möglich. Außerdem habe ich Links zu den Herkunftsort zur Verfügung gestellt.







METHODE 1 hier ist ein sehr langsames Looping Verfahren von hier
avg 13,01 Sekunden
lief 3 mal höchste entfernt, sind hier mal in Sekunden: 12.42, 13.60

METHODE 2 hier ist ein viel schnelleres Looping man von hier
avg 1,1658 Sekunden
lief 11 Mal höchste entfernt, sind hier mal in Sekunden: 1.117, 1.140, 1.203, 1.170, 1.173, 1.156, 1.203, 1.153, 1.173, 1.170

METHODE 3 Hier ist ein einzelner INSERT auf Code basiert von hier
avg 488,6 Millisekunden
lief 11 Mal höchste entfernt, sind hier mal in Millisekunden: 686, 673, 623, 686.343.343.376.360.343.453

METHODE 4 ist hier ein „semi-Looping“ Methode von hier avg 348,3 Millisekunden (es war schwer, ein gutes Timing zu bekommen, weil der „GO“ in der Mitte des Codes würde irgendwelche Vorschläge geschätzt werden)
lief 11 Mal höchste entfernt, hier geben Zeiten in Millisekunden: 356, 360, 283, 346, 360, 376, 326, 373, 330, 373

METHODE 5 ist hier eine einzelne INSERT von Philip Kelley Antwort
avg 92,7 Millisekunden
lief 11 Mal höchste entfernt, hier gibt Zeiten in Millisekunden: 80, 96, 96, 93, 110, 110, 80, 76, 93, 93

METHODE 6 ist hier eine einzelne INSERT von Mladen Prajdic Antwort
avg 82,3 Millisekunden
lief 11 Mal höchste entfernt, hier geben Zeiten in Millisekunden: 80, 80, 93, 76, 93, 63, 93, 76, 93, 76

METHODE 7 ist hier eine einzelne INSERT basiert auf dem Code von hier






avg 56,3 Millisekunden
lief 11 Mal höchste entfernt, hier geben Zeiten in Millisekunden: 63, 50, 63, 46, 60, 63, 63, 46, 63, 46

Nach einem Blick auf all diesen Methoden, Ich mag Methode 7, das die schnellsten und der Code war ziemlich einfach zu.

Wenn Sie gerade tun dies in SQL Server Management Studio oder sqlcmd, können Sie die Tatsache nutzen, dass der Batch-Separator ermöglicht es Ihnen, den Stapel zu wiederholen:

Dies wird 100000 Datensätze in die Zahlen-Tabelle einfügen.

Ich beginne mit der folgenden Vorlage, die aus zahlreichen Aufdrucken von Itzik Ben-Gan Routine abgeleitet:

Die „WHERE N<= 1000000" clause limits the output to 1 to 1 million, and can easily be adjusted to your desired range.

Da dies eine WITH-Klausel ist, kann es in eine INSERT gearbeitet werden. WÄHLEN. etwa so:

Indexieren der Tabelle, nachdem sie gebaut ist wird der schnellste Weg zu indizieren sein.

Oh, und ich würde bezeichnen es als „Tally“ Tabelle. Ich denke, dies ist ein gebräuchlicher Begriff ist, und man kann es durch Googeln Lasten von Tricks und Beispiele.

Ich mache das gleiche mit Datteln, eine Tabelle von 10 Jahren in der Vergangenheit in die Zukunft bis 10 Jahre erstreckt haben (und Stunden des Tages für eine ausführlichere Berichterstattung). Es ist ein netter Trick der Lage sein, Werte zu erhalten für alle Tage, auch wenn Sie Ihre ‚echte‘ Datentabellen für sie keine Daten.

Ich habe ein Skript, das ich diese erstellen können, so etwas wie (das aus dem Gedächtnis ist):

Die Anzahl der Zeilen verdoppelt mit jeder Zeile, so dass es nicht viel braucht wirklich große Tabellen zu erzeugen.

Ich bin mir nicht sicher, ob ich mit Ihnen einig, dass es wichtig ist, schnell erstellt werden, da Sie es nur einmal erstellen. Die Kosten für das über alle Zugriffe auf sie abgeschrieben, dass die Zeit ziemlich unbedeutend zu machen.

beantwortet 8. September '09 um 13:35 Uhr

jeweils Commits; 16 Ergebnisse in Msg 3902, Ebene, Status 1, Zeile 1 Die COMMIT TRANSACTION-Anforderung hat TRANSACTION keine entsprechende BEGIN. - KM. 10. September '09 um 19:36 Uhr

nur 128 Zeilen erhalten eingefügt - KM. 10. September '09 um 19:37 Uhr

Einige der vorgeschlagenen Methoden basieren auf Systemobjekte (zum Beispiel auf dem ‚sys.objects‘). Sie werden unter der Annahme, diese Systemobjekte genügend Datensätze enthalten unsere Zahlen zu erzeugen.

Als Lösung können wir unsere eigene Tabelle mit Datensätzen erstellen. Wir verwenden dann, dass man stattdessen diese systembezogenen Objekte (Tabelle mit allen Zahlen sollten in Ordnung sein, wenn wir den Bereich im Voraus sonst wissen wir, für die man gehen könnte das Kreuz kommen auf zu tun).

Die WAK-basierte Lösung funktioniert gut, aber es hat die verschachtelten Schleifen bezogenen Grenzen.







In Verbindung stehende Artikel