2008-10-16 11 views
9

Ist es weniger effizient, TEXT als Varchar in einer SQL-Datenbank zu verwenden?Datenbanken: Sind "TEXT" -Felder weniger effizient als "varchar"?

Wenn ja, warum?

Wenn nicht warum würden Sie TEXT nicht immer verwenden?

Ich ziele hier nicht auf eine bestimmte Datenbank ab, aber Orakel ist wahrscheinlich am relevantesten, obwohl ich vorläufig als Teil eines Proof of Concept auf MySQL teste.

+0

Ich denke, es ist alles gesagt worden, in MySQL Fall gibt es auch "INDEX READ" für varchar Spalten und immer ein "ROW READ" für Textspalten. Was eine LIKE-Abfrage in einer TEXT-Spalte verlangsamt. – Till

Antwort

4

Von Microsoft here

ntext-, Text und Bilddatentypen in einer zukünftigen Version von Microsoft SQL Server entfernt. Vermeiden Sie die Verwendung dieser Datentypen in der neuen Entwicklung arbeiten, und planen, Anwendungen , die sie derzeit verwenden, zu ändern. Verwenden Sie stattdessen nvarchar (max), varchar (max) und varbinary (max).

Wenn Sie varchar(max) über den Text verwenden, können Sie es in der WHERE-Klausel verwenden, weil sie die gleichen wie ihre kleineren Pendants arbeiten, varchar,nvarchar and varbinary. Im Folgenden finden Sie eine kleine Liste von dem, was im Gegensatz verwendet werden soll, was verwendet werden sollte:

  • Verwendung varchar (max) anstelle von Text
  • Verwenden nvarchar (max) statt ntext-
  • Verwendung varbinary (max) anstelle von Bild
1

Die kurze Antwort ist: Ja, sie sind weniger effizient.

Die längere, gewundene Antwort lautet:

Ja, sie sind wahrscheinlich weniger effizient. Es hängt davon ab, welches DBMS Sie verwenden und wie groß Ihre Tabelle usw. ist. TEXT-Felder haben eine variable Breite und daher muss das DBMS mehr Arbeit leisten, wenn es darum geht, Datensätze zu finden. Wie stark sich dies auf Ihre Leistung auswirkt, hängt direkt davon ab, wie effizient Ihr DBMS im Allgemeinen ist, wie viele Daten es über Tabellenzeilen speichert und ob es Tabellen mit fester Länge optimiert.

Ich weiß MySQL arbeitet schneller mit Tabellenzeilen fester Länge, aber Sie müssen es sagen, dass die Tabelle zuerst als Tabelle mit fester Länge behandelt werden kann. Ich habe keine praktischen Erfahrungen mit anderen DBMSs, um die tatsächlichen Zahlen in Beziehung setzen zu können. Aber auf Tabellen mit vielen (liest eine Million oder mehr) Datensätze kann es einen signifikanten Unterschied machen. Kleinere Tabellen werden wenig bis keinen praktischen Unterschied haben.

+0

Das ist 'TEXT' vs.' CHAR'. Das OP bat um 'TEXT' vs.' VARCHAR'. – dan04

1

Sie müssen genau angeben, über welche Datenbank Sie sprechen. Ich glaube an mindestens einige Datenbanken, TEXT wird als ein CLOB getrennt von der Tabelle selbst (die nur eine Referenz enthält) gespeichert. Dies führt dazu, dass die Tabelle kleiner (gut) ist, aber ein zusätzliches Nachschlagen und wahrscheinlich Cache-Fehltreffer beim Abrufen (schlecht).

Wahrscheinlich gibt es Indizierungs- und Abfrage-Implikationen, aber auch hier hängt es von dem jeweiligen RDBMS ab, das Sie verwenden.

2

PostgreSQL documentation says:

Tipp: Es ist keine Performance-Unterschiede zwischen diesen drei Typen, abgesehen von den erhöhten Speichergröße, wenn die Leerzeichen aufgefüllt Typ verwendet wird, und ein paar zusätzliche Zyklen, um die Länge zu überprüfen, wenn sie in einen Speicher Länge eingeschränkte Spalte. Während das Zeichen (n) in einigen anderen Datenbanksystemen Leistungsvorteile aufweist, hat es in PostgreSQL keine derartigen Vorteile. In den meisten Situationen sollte stattdessen Text oder Zeichenvariation verwendet werden.

Verwandte Themen