2009-07-22 12 views
0

Ich mache das so einfach wie möglich, aber manchmal dauert die Abfrage 3+ Sekunden. Ich verwende eine grundlegende parametrisierte Abfrage wie folgt:Was ist der schnellste Weg, um eine SQL Server-Spalte Text oder Ntext zu laden?

Gibt es einen schnelleren Weg, dies zu tun? Würde sich die Leistung verbessern, wenn ich die ntext-Spalte in eine nvarchar(MAX)-Spalte umwandelte?

+0

Gibt es einen Index auf „MyInfoID“? Das ist wahrscheinlich das wichtigste Element hier. –

+0

Ja. Es ist der Primärschlüssel. – Keltex

Antwort

2

ich gegen einigen politischen Wind hier gehen würde und sagen ...

Wenn Sie benötigen keine 16-Bit-Unicode-Funktionen, verwenden Sie varchar (MAX) anstelle von ntext. Wenn Sie varchar (MAX) anstelle von nvarchar (MAX) verwenden, wird die Speicher- und Übertragungszeit für das Textfeld halbiert.

Wenn Sie ernsthaft IO-gebundenes Netzwerk sind (Beispiel: Ihr "Textfeld" liegt im Megabyte-Bereich), sollten Sie die Datenkomprimierung in Erwägung ziehen: Speichern Sie stattdessen eine gezippte Version des Textes in einem varbinary (MAX) -Feld als Text. Somit wird das Mischen von Ergebnissen über das Netzwerk vollständig komprimiert. Komprimieren/Dekomprimieren von Text ist relativ einfach in .NET und CPU-Zyklen sind in der Regel billig.

(SQL Server 2008 das neue „Kompression“ bietet wirklich würde hier nicht helfen ... der Verkehr über den Draht wäre das gleiche.)

0

Haben Sie die Abfrage profiliert oder analysiert, um sicher zu sein, dass der Text/Ntext-Abruf das Problem ist? Dies könnte ein fehlerhafter Index sein, der zum Beispiel einen Tabellenscan verursacht.

+0

Es verwendet den Primärschlüssel, der indiziert ist. – Keltex

1

Ja, Sie können eine Leistungsverbesserung mit nvarchar max aufgrund der Unterschiede in bekommen, wie die Daten gespeichert werden, wie beschrieben und analysiert here

Ein weiteres Plus für bis NVARCHAR MAX bewegt, ist die größere Flexibilität über ntext- Plus ntext- zugunsten von NVARCHAR MAX

Die wahrscheinliche Verbesserung der Leistung wird, soll

Bearbeiten, um einen geeigneten Index minimal im Vergleich veraltet: wenn Unterschied im Gespräch In Ausführungszeiten kann dies auf eine zwischengespeicherte Ausführungsplanwiederverwendung/Daten zurückzuführen sein, die zwischengespeichert werden. Wenn Sie versuchen, dies zu optimieren, indem Sie entweder Indizes ändern oder den Datentyp ändern, stellen Sie sicher, dass Sie die Leistung fair vergleichen, um sicherzustellen, dass Sie keine verzerrten Ergebnisse erhalten. Sie können dies tun, indem Sie den Ausführungsplan-Cache und Daten-Cache-Entrümpelung, wenn auch nicht auf dem Produktionsserver empfohlen tun:

DBCC DROPCLEANBUFFERS -- Clear data from cache 
DBCC FREEPROCCACHE -- Clear plan cache 
Verwandte Themen