Clustered vs. nicht Gruppierten Primärschlüssel
begin transaction;
create table person_id(person_id integer primary key);
insert into person_id values(1);
... snip ...
insert into person_id values(50000);
commit;
Dieser code dauert etwa 0,9 Sekunden auf meinem Rechner und erstellt eine db-Datei nehmen 392K. Diese zahlen 1,4 Sekunden und 864K wenn ich die zweite Zeile zu
create table person_id(person_id integer nonclustered primary key);
Warum ist das der Fall?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine großartige Antwort auf diese Frage ist zur Verfügung über die unter das DBA StackExchange: https://dba.stackexchange.com/questions/7741/when-should-a-primary-key-be-declared-non-clustered/7744#7744
Clustering der primäre Schlüssel speichert es mit den Zeilen; dies bedeutet, dass es nimmt weniger Platz (da es keine separaten index-Blöcke). In der Regel seine größte Vorteil ist allerdings, dass die range-scans können in der Regel Zugriff auf Zeilen, die in dem gleichen block, Reduzierung der E /a-Operationen, das wird eher wichtig, wenn Sie eine große Datenmenge (nicht 50k ints).
Ich denke 50k ints ist eine ziemlich künstliche benchmark-und nicht eine, die Sie interessieren in der realen Welt.
[Nur eine Idee]
Vielleicht, wenn Sie explizit angeben zu nehmen integer-Spalten als clustered key, genau das tut es. Aber wenn Sie sagen, es nicht zu verwenden, Ihre ganze Spalte, es immer noch schafft einen index hinter die kulissen wählt aber einen anderen Datentyp um dies zu tun, angenommen, doppelt so groß. Dann alle diese Einträge referenzieren die Datensätze in der Tabelle und hier gehen Sie, die Größe explodiert.
Ich randomisierten insert-Anweisungen, und wieder hat die Abfrage mit Werten aus einer halben million. Interessant ist, dass beide die gruppierten und nicht gruppierten db-Dateien nehmen Sie jetzt den genauen Speicherplatz (bis auf das byte genau). Jedoch die Einsätze auf den gruppierten db sind noch schneller.
Für mich ist counter-intuitiv. Wenn ich sage die Datenbank-cluster-diese Werte - ich sage die Datenbank ... diese Werte besser in dieser Reihenfolge sein, wenn ich zurückkomme, um Sie zu bekommen. Wenn ich nicht die Spezifikation, bin ich im wesentlichen sagen, die db - look, der diese Werte und ordnen Sie diese wie Sie wollen - was macht Ihr Leben einfacher.
Theoretisch, diese zusätzliche Freiheit sollte niemals verlangsamen die Abfragen. Vielleicht nicht beschleunigen, die ganze Zeit, aber nie langsam nach unten. Gedanken?