Ich habe eine Tabelle mit einer großen Anzahl von Zeilen (10K +) und es Primärschlüssel ist GUID. Der Primärschlüssel ist gruppiert. Die Abfrageleistung ist in dieser Tabelle ziemlich niedrig. Bitte geben Sie Vorschläge, um es effizient zu machen.Verbesserung der Leistung des Cluster-Index GUID-Primärschlüssel
Antwort
Sie müssen verwenden NEWSEQUENTIALID() statt finden hier Some Simple Code To Show The Difference Between Newid And Newsequentialid
Ich habe viel über newsequentialid() gelesen, aber es scheint eine SQL-Funktion zu sein, kann mir jemand sagen, was zu tun ist, wenn Guid aus Code (C#) generiert werden. –
-1 Was hat diese Antwort mit dem physischen Clustering von Indizes zu tun? Die Person, die die Frage gestellt hat, hat bereits angegeben, dass sie/er 10K + Zeilen hat und er/sie wahrscheinlich nicht gehen und alle Schlüssel ändern möchte. – nashwan
Sie können sequentielle GUIDs versuchen, die den Index effektiver machen. Info here.
Ein Clustered-Index auf GUID ist kein gutes Design. Die Besonderheit von GUID besteht darin, dass es zufällig ist, während ein gruppierter Index die Datensätze physisch nach dem Schlüssel sortiert. Die zwei Dinge sind völlig uneins. Für jedes Insert muss SQL die Datensätze auf dem Datenträger neu anordnen! Entfernen Sie das Clustering aus diesem Index!
Die Zeit für Clustering ist, wenn Sie eine "natürliche" Reihenfolge zu den Daten haben: Zeit eingefügt, Kontonummer, usw. Für Zeitfelder ist Clustering fast frei. Für Kontonummern kann es kostenlos oder billig sein (wenn Kontonummern nacheinander zugewiesen werden).
Zwar gibt es möglicherweise technische Möglichkeiten für das GUID-Problem, aber die beste Idee ist zu verstehen, wann Clustering verwendet werden soll.
+1 für den harten Ton. In dieser Frage gibt es nicht viel Grauzone. Tu es nicht. – Droogans
Bitte vermeiden Spalten für lenghty String gruppierten Index zu erstellen. GUID wird 36 Zeichen haben. Dies verringert die Abfrageleistung, die Sie selbst als Clustered-Index erstellt haben. Zur besseren Übung verwenden Sie Integer-Identity-Spalten.
Guid ist 16 Bytes - nicht 36 Zeichen. –
Integer sind kein gutes Design für große Datenbanken – Leonardo
Kimberly Tripp diskutiert dieses Problem für große Tabellen sehr gut auf ihrer Website unter diesem Link: [GUIDs als PRIMARY KEYs und/oder der Clustering-Schlüssel] (http://www.sqlskills.com /BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx). – Graeme
Sie müssen Ihre Abfrage analysieren. Wir können nur erraten, warum Ihre Abfragen schlecht abschneiden, ohne den Ausführungsplan zu sehen (den Sie problemlos von SQL Server oder Oracle abrufen können).
Wenn man bedenkt, dass eine GUID ein 128-Bit-Wert ist (falls roh gespeichert), schneidet eine GUID die Dichte der Daten- und Indexblöcke um bis zu 50% ab (im Falle des Primärschlüsselindex) GUID ist angemessen.
Aber das ist vielleicht nicht das Problem, also überprüfen Sie den Abfrageplan. Es könnte mehrere andere Probleme geben.
Es gibt kein Problem mit der Verwendung einer GUID als Primärschlüssel. Stellen Sie nur sicher, dass, wenn Sie tatsächlich die GUID als Primärschlüssel festgelegt haben, der Index, der automatisch erstellt wird, vom Typ Nicht gruppiert ist. Viele Leute vergessen (oder wissen nicht), dies in SQL Server zu tun.
Verwenden Sie NIEMALS einen gruppierten Index für eine GUID. Dies führt zu einer physischen Reihenfolge um die GUID auf der Festplatte, die offensichtlich sinnlos ist (wie bereits erwähnt)
Verwenden Sie niemals einen gruppierten Index für eine GUID? Das ist eine mutige Aussage. Sind Sie sicher, dass es keine Gegenbeispiele gibt? – MarkPflug
Bitte nennen Sie einen, wenn Sie einen kennen :-). Ich sehe keinen Grund, warum Sie etwas physisch um eine GUID bestellen möchten. – nashwan
Wenn SELECT-Leistung wichtig ist und Sie auf GUID auswählen werden ... –
- 1. Verbesserung der Leistung des lokalen Google-Entwicklungsservers
- 2. Die Verbesserung Solr Leistung
- 3. Verbesserung der Leistung der räumlichen MySQL-Abfrage
- 4. Azure Service Fabric - Verbesserung der lokalen Leistung
- 5. MySQL - Verbesserung der Leistung einer langsamen Unterabfrage
- 6. Wie zur Verbesserung der MongoDB Leistung
- 7. Verbesserung der Leistung in dieser Abfrage
- 8. Vermeidung mehrerer Lookups und Verbesserung der Leistung
- 9. StringReplace Alternativen zur Verbesserung der Leistung
- 10. MySQL - Verbesserung der Leistung für Multi-Länder
- 11. Verbesserung der CoreGraphics Leistung auf dem iPhone4
- 12. Verbesserung der Long-Polling Ajax Leistung
- 13. Strategien zur Verbesserung der Leistung von Interpreter
- 14. Remove Unterabfrage zur Verbesserung der Leistung
- 15. Verbesserung der Ansicht Leistung in SQL Server
- 16. PostgreSQL: Verbesserung pg_dump, pg_restore Leistung
- 17. Verbesserung der Leistung der Multiplikation von Scipy Sparse Matrizen
- 18. Rails „Studenten-Prüfung“ app, die Verbesserung der Leistung
- 19. Verbesserung der Leistung von jquery/javascript Webseite Logik
- 20. zur Verbesserung der Leistung out.print sollte verwendet werden oder nicht?
- 21. Wie zur Verbesserung der Leistung für große Listen in Python
- 22. Wie sqlite wie Anweisung zur Verbesserung der Leistung
- 23. Alternative zur komplexen for-Schleife zur Verbesserung der Leistung
- 24. Techniken zur Verbesserung der Transaktionsrate
- 25. Verbesserung der Effizienz in der jQuery-Funktion
- 26. Messung der Leistung des Klassifikationsalgorithmus
- 27. Möglichkeiten zur Verbesserung der UIWebView-Scrollleistung?
- 28. Die Verbesserung Vergleichbare <T> compareTo Leistung
- 29. Jobs zur Verbesserung der Datenbankverfügbarkeit und -performance
- 30. Verbesserung der Codequalität?
Mögliche Duplikate von [Was sind die Best Practices für die Verwendung einer GUID als Primärschlüssel, insbesondere in Bezug auf die Leistung?] (http://stackoverflow.com/questions/11938044/what-are-the-best-practices-for-using-a-guid-as-a-primary-key-specifico-rega) – AHiggins
Machen Sie es nicht gruppiert! (wenn es als GUID bleiben muss) – nashwan