Frage

Was ich meine, ist: Gibt es eine Tabelle mit 20 Spalten profitieren mehr von der Indizierung ein bestimmtes Feld (eine, die auf der Suche-ish-Abfragen verwendet wird) als eine Tabelle, die nur 4 Spalten

Also: Was ist der Schaden beim Hinzufügen von Index zu den Feldern, dass ich nicht mit viel suchte, aber vielleicht später in der Zukunft? Gibt es eine negativ Hinzufügen von Indizes? Ist es nur die Größe dauert es auf der Festplatte, oder es kann die Dinge langsamer laufen unnötige Indizes hinzufügen?

aus einem Kommentar extrahiert

Ich bin mit Postgres (neueste Version) und ich habe eine Tabelle, dass ich eine Menge von LIKE Abfragen vom Typ tun, usw., aber die Werte werden zweifellos oft ändern, da meine Kunden Zugang zu CRUD haben. Soll ich kann die Idee von Indizes? Sind sie nur Kopfschmerzen?

War es hilfreich?

Lösung

  

Gibt es eine Tabelle mit 20 Spalten profitieren mehr von der Indizierung ein bestimmtes Feld (eine, die auf der Suche-ish-Abfragen verwendet wird) als eine Tabelle, die nur 4 Spalten hat?

Nein, die Anzahl der Spalten in einer Tabelle hat keinen Einfluss auf Leistungen aus einem Index.

Ein Index ist ausschließlich auf den Werten in der Spalte (n) festgelegt; es ist die Häufigkeit der Werte, die wie viel Nutzen Ihre Fragen sehen auswirken wird. Zum Beispiel kann eine Spalte einen Booleschen Wert enthält, ist eine schlechte Wahl für die Indizierung, weil es eine 50/50 Chance, wird der Wert der eine oder andere Wert sein. Bei einem Verhältnis von 50/50 über alle Zeilen, wird der Index nicht verengt die Suche nach einer bestimmten Zeile.

  

Was ist der Schaden beim Hinzufügen von Index zu den Feldern, dass ich nicht mit viel suchte, aber vielleicht später in der Zukunft?

Indizes beschleunigen nur bis Datenabruf, wenn sie verwendet werden können, aber sie sich negativ auf die Geschwindigkeit von INSERT / UPDATE / DELETE-Anweisungen beeinflussen. Indizes auch Wartung erfordern, ihren Wert zu halten.

Andere Tipps

Wenn Sie wie tun abfragt Sie können feststellen, dass Indizes sind nicht nicht viel Hilfe sowieso. Während ein Index könnte diese Abfrage ...

verbessern
select * from t23
where whatever like 'SOMETHING%'
/

... es ist unwahrscheinlich, dass ein Index mit einem diesen Abfragen ...

helfen
select * from t23
where whatever like '%SOMETHING%'
/

select * from t23
where whatever like '%SOMETHING'
/

Wenn Sie Freitextfelder haben und Ihre Benutzer brauchen Fuzzy Matching, dann sollten Sie bei Postgres vollständigen Text Funktionalität aussehen. Dies setzt den MATCH Operator statt LIKE und die einen besonderen Indextyp erfordert. Weitere Informationen.

Es gibt eine Gotcha, die ist, dass Volltextindizes sind komplizierter als die normale und die verwandte Design-Entscheidungen sind nicht einfach . Auch einige Implementierungen benötigen zusätzliche Wartungsarbeiten .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top