2009-05-03 7 views
0

Ich habe eine Tabelle, die auf über 1 Million Datensätze ... heute (alle gültig)SQL Server 2008 Langsame Tabelle, Tabellenpartitionierung

Ich brauche es zu beschleunigen gewachsen ist ... würde die Tabellenpartitionierung die Antwort sein ? Wenn ja, kann ich Hilfe beim Erstellen der Abfrage erhalten?

Die Tabelle 4 Bigint Wert Tasten hat und das ist alles mit einem Primärschlüssel indiziert und einem Index ab auf Benutzer-ID die anderen Werte bei max sind 139 (es gibt etwas mehr als 10.000 Anwender jetzt) ​​

Jede Hilfe oder Richtung würde geschätzt werden :)

+0

Konnten Sie uns die Tabellenstruktur, einige Beispielabfragen, die langsam sind, und alle vorhandenen Indizes zeigen? – sisve

+0

Wir können nicht antworten: nicht genug Informationen. Basierend auf Ihrem Kommentar unten: Falsche Edition von SQL Server, keine native SQL verwenden, kein Schema oder Indizes veröffentlicht. – gbn

Antwort

1

müssen Sie wahrscheinlich nur Ihre Abfragen und/oder Indizes tunen. 1 Million Datensätze sollten Ihnen keine Probleme bereiten. Ich habe eine Tabelle mit mehreren hundert Millionen Datensätze & bin in der Lage, ziemlich hohe Leistung zu halten. Ich habe festgestellt, dass der SQL Server Profiler mit diesem Zeug ziemlich hilfreich ist. Es ist in SQL Server Management Studio verfügbar (aber leider nicht in der Express-Version). Sie können auch aufrufen, um ein Diagramm zu sehen, wo die Zeit während der Abfrage verbraucht wird.

+0

Ich habe nur express :(, Server ist ein Enterprise-Cluster 2008. Site ist MVC und LINQ zu SQL. LINQPad zeigt die Ausgabe, um ziemlich einfach zu sein nice so oft Abfragen gibt es nur eine Menge Verlangsamung auf der Website im Allgemeinen .. sogar auf Seiten, die nur ein artilce laden (Artikel Tabelle hat wie ... 30 Artikel? heh) –

+0

Es ist schwer zu helfen, ohne weitere Informationen über die Tabelle und welche Abfragen Sie ausführen.Ich habe festgestellt, dass mit LINQ zu SQL es ist leicht zu verpassen a .ToList(), und Ihre Abfrage endet immer und immer wieder, wenn Sie denken, dass Sie nur über Elemente in Ihrem Ergebnissatz iterieren.Übergeben Sie Ihren gesamten Code und stellen Sie sicher, dass Sie die Abfragen außerhalb von Schleifen ausführen Beachten Sie, dass Ihre Ergebnisse lazy loaded sind - die Abfragen werden ausgeführt, wenn Sie das erste Mal auf die Ergebnismenge zugreifen. Eine kleine .ToList() macht manchmal einen großen Unterschied. – Bryan

2

Sie sollten Ihre Indizes untersuchen und die Arbeitslast abfragen, bevor Sie über die Partitionierung nachdenken. Wenn Sie eine große Anzahl von Einfügungen erstellt haben, ist Ihr Clustered-Index möglicherweise fragmentiert.

Auch wenn Sie SQL Server Express verwenden, können Sie immer noch dieses kostenlose Tool Profil mit: Profiler for Microsoft SQL Server 2005/2008 Express Edition

0

Ich stimme mit den anderen Kommentaren. Bei einer relativ kleinen Datenbank (größte Tabelle 1MM-Datensätze) ist es unwahrscheinlich, dass eine Aktivität in der Datenbank eine merkliche Last liefert, wenn Abfragen optimiert werden und der Rest des Codes die Datenbank nicht mit redundanten Abfragen missbraucht. Es ist eine gute Gelegenheit, ein Gefühl für das Zusammenspiel zwischen Datenbankabfragen und dem Rest des Codes zu bekommen.