2009-06-18 1 views
7

Machen Sie Einschränkungen für eine DataTable (z. B. PrimaryKey & UniqueContraint) make Selects effizienter als in SQL Server? Oder ist ihr einziger Zweck, Regeln für die Daten durchzusetzen?Wie wirken sich ADO.NET DataTable-Einschränkungen auf die Leistung aus?

myDT.Constraints.Add("PK", myDT.Columns["UniqueID"], true); //add a primary key 
myDT.Constrinats.Add(new UniqueConstraint(new DataColumn[] { //add a unique constraint for UserID 
    myDT.Columns["UserID"], myDT.Columns["UniqueID"] 
})); 

Würden diese Beispiele möglicherweise eine bessere Leistung haben, wenn Daten in der Datentabelle von UniqueID oder UserID aufzublicken?

+0

Ich denke, Revision # 2 ist der korrekte Titel, Terrapin. "Affekt" ist in diesem Fall ein besseres Wort als "Effekt". Ich sehe, dass du zwischen den beiden hin und her gegangen bist, also werde ich es dir überlassen, es zu bearbeiten, wenn du zustimmst. –

Antwort

0

Im Allgemeinen Einschränkungen verlangsamen Dinge. Aber für selects kann die einzigartige Einschränkung die Dinge beschleunigen (aber ich kann eine MS-Referenz finden), auch kann es basierend auf der Auswahl begrenzt sein. Die meisten Referenzen, die ich finde, sprechen über die Einschränkungen, die die Dinge verlangsamen.

Also in Ihrem Fall könnte es die Leistung verbessern.

http://msdn.microsoft.com/en-us/library/49z48hxc.aspx

+0

Ich habe folgendes gefunden: http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.adonet/2006-03/msg00379.html – eschneider

4

Ich glaube, Sie die Verwendung von Primärschlüsseln sind verwirrend und Einschränkungen (Business-Domain-Modell) mit der Verwendung von Indizes (Performance).

Ein Fremdschlüssel kann einen Optimierer beeinflussen, und es ist üblich, einen Index für Fremdschlüssel zu erstellen. In der SQL Server-Welt wird ein Primärschlüssel oft mit einem Clustered-Index verwechselt, weil häufiger als ein Ersatzschlüssel (siehe Auto-Increment-Identitätsspalte) als Primärschlüssel und Clustered-Index ausgewählt wird.

Dieser Artikel könnte Sie interessieren: DataSet and DataTable in ADO.NET 2.0.

Als Antwort auf Ihren Kommentar:

ein Dataview-Gebrauch für Repetitive Nicht-Primärschlüssel Suchen Wenn Sie Bedarf wiederholt durch die Suche Nicht-Primärschlüsseldaten, eine Dataview erstellen, hat eine Sortierreihenfolge. Diese erstellt einen Index, der verwendet werden kann, die Suche durchzuführen. Dies ist am besten geeignet für repetitive Suchen, weil gibt es einige Kosten für die Erstellung der Index.

Das Dataview-Objekt stellt das Finden und FindRows Methoden, so dass Sie Abfrage der Daten in der zugrunde liegenden Datatable. Wenn Sie nur eine einzelne Abfrage ausführen, reduziert die Verarbeitung, die zum Erstellen des Index erforderlich ist, die Leistung, die von mit dem Index gewonnen wird.

Wenn Sie ein Dataview-Objekt zu erstellen, verwenden den Dataview-Konstruktor, der zusammen mit dem zugrunde liegenden Table die Sort, RowFilter und RowStateFilter Werte als Konstruktor Argumente übernimmt. Der Konstruktor DataView stellt sicher, dass der Index einmal erstellt wird. Wenn Sie eine leere DataView erstellen und anschließend die Eigenschaften Sort, RowFilter, oder RowStateFilter festlegen, wird der Index mindestens zweimal unter erstellt.

+1

Gibt es eine Möglichkeit, einen Index hinzuzufügen eine ADO.NET DataTable, mit der ich effizient nach diesen Spalten suchen könnte? Ich habe keine gesehen, daher die UniqueConstraint, die in SQL Server würde mir einen impliziten Index geben. Ich weiß nur nicht, ob die gleiche Effizienz in .NET übersetzt wird. – Seibar

+0

Sie sollten es Benchmark und sehen Sie selbst, wenn es eine Verbesserung in Ihrer Situation schafft. Die Ergebnisse können Sie überraschen. –

+0

Benchmarking ist immer eine gute Idee. –

0

DataTable s werden unter Verwendung von B-trees (oder einer Abwandlung davon) implementiert. Ein kurzer Blick in Reflector zeigt, dass es eine Index Klasse plus LiveIndexes Eigenschaft in einer DataTable Klasse gibt, was bedeutet, dass es einige Indizes gibt, aber ich weiß nicht wirklich wo sie sind.

Von meiner (wirklich begrenzten) Erfahrung: Anfragen auf PK sind sehr schnell.

Verwandte Themen