Clustered vs NonClustered Primärschlüssel

8
%Vor%

Dieser Code dauert ungefähr 0,9 Sekunden auf meinem Computer und erstellt eine Datenbankdatei, die 392 KB in Anspruch nimmt. Diese Zahlen werden 1,4 Sekunden und 864K, wenn ich die zweite Zeile zu

ändere %Vor%

Warum ist das der Fall?

    
Elite Mx 26.01.2010, 09:35
quelle

4 Antworten

3

Eine gute Antwort auf diese Frage finden Sie im DBA StackExchange: Ссылка

    
Ryan Kirkman 12.03.2013 01:57
quelle
2

Wenn Sie den Primärschlüssel gruppieren, wird er in den Zeilen gespeichert. Dies bedeutet, dass es weniger Platz benötigt (da keine separaten Indexblöcke vorhanden sind). Der Hauptvorteil besteht jedoch darin, dass Bereichs-Scans im Allgemeinen auf Zeilen zugreifen können, die sich im selben Block befinden, wodurch IO-Vorgänge reduziert werden, was bei großen Datenmengen (nicht 50.000.000) sehr wichtig ist.

Ich denke, 50k ints ist ein eher künstlicher Maßstab und nicht einer, den Sie in der realen Welt interessieren.

    
MarkR 26.01.2010 09:53
quelle
0

[Nur als Idee]

Wenn Sie explizit angeben, dass Integerspalten als gruppierter Schlüssel verwendet werden sollen, wird genau das getan. Aber wenn Sie ihr sagen, dass sie Ihre Integer-Spalte nicht verwenden soll, erstellt sie immer noch einen Index hinter den Kulissen, wählt aber einen anderen Datentyp, um das zu tun, angenommen, doppelt so groß. Dann muss jeder dieser Einträge auf die Datensätze in der Tabelle verweisen und hier geht's los, die Größe explodiert.

    
user151323 26.01.2010 09:48
quelle
0

Ich habe die insert-Anweisungen randomisiert und die Abfrage mit Werten von einer bis einer halben Million erneut durchgeführt. Interessanterweise nehmen sowohl die gruppierten als auch die nicht gruppierten db-Dateien nun genau den Platz ein (bis auf das Byte). Die Einfügungen in der gruppierten Datenbank sind jedoch noch schneller.

Für mich ist das gegensätzlich. Wenn ich dem Datenbankcluster diese Werte erzähle, sage ich der Datenbank ... diese Werte sollten besser in dieser Reihenfolge sein, wenn ich zurückkomme, um sie zu bekommen. Wenn ich nicht die Spezifikation habe, sage ich im Wesentlichen, dass der db - Look diese Werte annimmt und sie so anordnet, wie Sie möchten - was auch immer Ihr Leben einfacher macht.

Theoretisch sollte diese zusätzliche Freiheit die Abfragen niemals verlangsamen. Vielleicht nicht die ganze Zeit beschleunigen, aber niemals verlangsamen. Gedanken?

    
Elite Mx 26.01.2010 17:30
quelle