Gründe, die nicht über einen gruppierten index in SQL Server 2005
Habe ich geerbt, einige Erstellung der Datenbank-Skripts für eine SQL SERVER 2005-Datenbank.
Eine Sache, die ich bemerkt habe, ist, dass alle Primärschlüssel erstellt werden, wie NON CLUSTERED
Indizes im Gegensatz zu gruppierten.
Ich weiß, dass Sie nur einen gruppierten index pro Tabelle und, möchten Sie vielleicht, um es auf eine nicht-Primärschlüsselspalte für die Abfrage-performance von Suchanfragen, etc. Jedoch gibt es keine andere CLUSTERED
Indizes für die Tabellen in Fragen.
Also meine Frage ist gibt es irgendwelche technischen Gründe, nicht gruppierte Indizes für eine primary key-Spalte abgesehen von den oben genannten.
- "Eine Sache, die ich bemerkt habe, ist, dass alle Primärschlüssel erstellt werden als NICHT GRUPPIERTE Indizes im Gegensatz zu clustured" Warum beobachte ich das Gegenteil?
- um zu klären, seine Datenbank-Skripte, die ich geerbt, die ausdrücklich die Einstellung der Tasten werden nicht gruppiert.
- Auch ich konnte immer noch nicht verstehen, es, stackoverflow.com/questions/3970430/... , aber ich konnte nicht verstehen, warum/Wann haben gruppierten index überhaupt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf jedem "normalen" Daten-oder lookup-Tabelle: Nein, ich sehe keinen Grund.
Auf Sachen wie bulk-import von Tabellen temporäre Tabellen oder - es hängt davon ab.
Einige Leute überraschend, es scheint, dass ein gute gruppierten index tatsächlich beschleunigen kann Operationen wie INSERT-oder UPDATE. Finden Sie Kimberly Tripps ausgezeichnete Der Gruppierte Index Debatte geht weiter.... blog-post, in dem Sie erklärt sehr ausführlich, warum dies der Fall ist.
In diesem Licht: ich sehe nicht, alle triftigen Grund nicht haben eine gute gruppierten index (schmale, stabile, einzigartige, ständig wachsende =
INT IDENTITY
als die naheliegendste Wahl) auf SQL Server-Tabelle.Bekommen einige Tiefe Einblicke in das wie und warum zu wählen, clustering-Schlüssel, Lesen Sie alle von Kimberly Tripp ausgezeichnete blog-posts zum Thema:
http://www.sqlskills.com/BLOGS/KIMBERLY/category/Clustering-Key.aspx
http://www.sqlskills.com/BLOGS/KIMBERLY/category/Clustered-Index.aspx
Gute Sachen von der "Queen of Indexing" ! 🙂
Gruppierte Tabellen vs Heap-Tabellen
(Guter Artikel zu dem Thema bei http://www.mssqltips.com)
HEAP-Tabelle (Ohne clustered index)
Daten werden in keiner bestimmten
um
Spezifische Daten können nicht abgerufen werden
schnell, es sei denn, es gibt auch
non-clustered-Indizes
Daten-Seiten sind nicht miteinander verbunden, so
sequenziellen Zugriff darauf zu verweisen zurück
der index allocation map (IAM)
Seiten
Da es keinen gruppierten index,
zusätzliche Zeit wird nicht benötigt
verwalten des index
Da es keinen gruppierten index,
es ist nicht die Notwendigkeit für zusätzliche
Speicherplatz zum speichern der gruppierten index
Baum
Diese Tabellen haben eine index_id Wert
0 in der sys.Indizes-Katalogsicht
Gruppierte Tabelle
Daten gespeichert werden, um auf der Grundlage der
Schlüssel des gruppierten Indexes
Daten schnell abgerufen werden kann, basiert
auf dem Schlüssel des gruppierten Indexes, wenn die
Abfrage verwendet die indizierten Spalten
Daten-Seiten verknüpft sind, für eine schnellere
sequential access
Zusätzliche Zeit, die gebraucht wird, um clustered-index auf der Grundlage
EINFÜGUNGEN, AKTUALISIERUNGEN und LÖSCHUNGEN
Zusätzlicher Speicherplatz benötigt wird, zu speichern
clustered index-Baum
Diese Tabellen haben einen index-id mit dem Wert 1 im sys.Indizes Katalog
Ansicht
Bitte Lesen Sie meine Antwort unter "Keinen direkten Zugriff auf die Daten der Zeile in der gruppierten Tabelle - warum?", erste. Insbesondere Punkt [2] Einschränkung.
Die Menschen, wer schuf die "Datenbank" sind cretins. Sie hatte:
Für solche Sammlungen von Tabellen, die sich als Datenbanken, es wird immer mehr und mehr üblich, um zu vermeiden, GUS insgesamt, und nur NCIs plus Heap. Natürlich bekommen Sie nichts von der macht oder Vorteile der CI, aber die Hölle, Sie bekommen nichts von der macht, oder profitieren Sie von Relationalen Datenbanken, also wer kümmert sich, dass Sie nichts von der macht der GUS, deren Design für Relationale Datenbanken, die Ihnen keine). Die Art und Weise Sie es betrachten, müssen Sie "umgestalten" das verflixte Sache, die jeder so oft, ja eh, also warum die Mühe. Relationale Datenbanken müssen nicht "refactoring".
Wenn Sie brauchen, um zu diskutieren diese Antwort weiter, bitte posten Sie die CREATE TABLE - /INDEX-DDL -; ansonsten ist es eine Zeitverschwendung akademisches argument.
Hier ist noch ein (habe es schon in anderen Antworten?) mögliche Ursache (noch zu verstehen):
Ich hoffe, ich werde aktualisieren später, aber für jetzt ist es eher der Wunsch, die Verknüpfung dieser Themen
Update:
Was vermisse ich in das Verständnis der gruppierten index?
Mit einigen b-Baum-Server/Programmierung Sprachen, die noch heute verwendet werden, Feste oder variable Länge flache ascii-Dateien dienen zum speichern von Daten. Wenn ein neuer Datensatz/Zeile Hinzugefügt wird, um eine Datei (Tabelle) die Scheibe (1) an das Ende der Datei (oder ersetzen einer gelöschten Datensatz) und (2) die Indizes werden ausgeglichen. Wenn Daten gespeichert werden, auf diese Weise brauchen Sie nicht besorgt zu sein über die Leistungsfähigkeit des Systems (so weit wie das, was die b-Baum-server ist dabei zu gibt einen Zeiger auf den ersten Datensatz). Die Reaktionszeit wird nur vorgenommen, durch die # der Knoten in Ihrem index-Dateien.
Wenn Sie in die Verwendung von SQL, die Sie hoffentlich zur Einsicht kommen, dass system-performance berücksichtigt werden, wenn Sie schreiben Sie eine SQL-Anweisung. Mit einem "ORDER BY" - Anweisung auf einer nicht indizierten Spalte bringen kann ein system in die Knie zu zwingen. Mit einem gruppierten index könnte stellen eine unnötige Belastung der CPU. Es ist die 21 Jahrhundert und ich wünschte, wir hatten nicht zu denken, die system-performance bei der Programmierung in SQL, aber das tun wir immer noch.
Mit einigen älteren Programmiersprachen, war es zwingend erforderlich, um einen index verwenden, wenn Daten sortiert abgerufen werden. Ich wünschte nur, diese Forderung wurde noch im Platz heute. Ich kann mich nur Wundern, wie viele Unternehmen aktualisiert haben, Ihren langsamen computer Systeme durch eine schlecht geschriebene SQL-Anweisung, die auf nicht-indizierten Daten.
In meinen 25 Jahren der Programmierung habe ich noch nie benötigt, meine körperlichen Daten, die in einer bestimmten Reihenfolge, so vielleicht das ist, warum manche Programmierer vermeiden Sie die Verwendung von clustered-Indizes. Es ist schwer zu wissen, was der Kompromiss ist (Lagerung, Verse retrieval-Zeit) vor allem, wenn das system, das Sie entwerfen, speichern Millionen von Datensätzen eines Tages.