2016-03-24 11 views
0

Ich muss einen Index für eine Spalte für eine bessere Leistung erstellen. Die Spalte hat den Typ Zeitmarke und wäre ein funktionsbasierter Index. Das Problem ist: Diese Spalte wird sehr häufig aktualisiert.Index für eine Spalte sehr häufig aktualisiert

Die Oracle-Dokumentation besagt, dass Spalten, die häufig geändert werden, nicht indiziert werden.

Gibt es eine bessere Möglichkeit, diese Spalte abzufragen?

bearbeitet:

In der folgenden Abfrage wird die Spalte VALIDATIONTIME:

select * 
from orders 
where VALIDATIONTIME between 
    TO_TIMESTAMP('2016/03/06 10:45:18', 'YYYY/MM/DD HH24:MI:SS') 
and 
    TO_TIMESTAMP('2016/03/15 19:50:18', 'YYYY/MM/DD HH24:MI:SS'); 
+4

Der Index sollte nur erstellt werden, wenn dies bei Leistungsproblemen helfen kann. Der Trick besteht darin, den Engpass in Ihren Prozessen zu finden. Wenn Ihre Aktualisierungen zu lange dauern - erstellen Sie keinen Index, wenn Ihre Auswahlen Ihr Problem sind - erstellen Sie einen. Es gibt keine einzige Regel, die zu befolgen ist, und die Oracle-Dokumentation empfiehlt nur, was in diesen Fällen die beste Vorgehensweise ist. –

+1

Wie die oben erwähnte Person, es ist nur ein Kompromiss. Testen Sie es für Ihre Anwendung und wägen Sie die Ergebnisse mit dem Endziel ab. – Dane

Antwort

0

Ein Zeitstempel kann eine hohe Mächtigkeit helfen sicherzustellen, so dass es sehr wohl eine gute Wahl sein, aber es hängt wirklich von das Prädikat, mit dem Sie auf die Daten zugreifen. Die Timestamp-Spalte hat nur dann eine gute Kardinalität, wenn Zeilen einzeln in verschiedenen Arbeitseinheiten eingefügt werden! Jetzt weiß ich nichts über diese Tabelle oder ihre Verwendungsmuster, aber es hängt wirklich von dem Prädikat ab, das Sie verwenden, um auf die Daten zuzugreifen.

Wir fragen selten, was genau in einer Mikrosekunde passiert ist. So ist es sehr selten, ein Prädikat des Formulars where timestamp_column = some precise value zu sehen. Es ist viel wahrscheinlicher, dass ein Bereichsausdruck wie where timestamp_column between :ts1 and :ts2 angezeigt wird. In den meisten Fällen wird dieses Vergleichselement einen Begleiter haben.

So als eine grobe Verallgemeinerung, könnte man bedenkt:

  • die Zeitstempel-Spalte als zweite oder nachfolgende Spalt eines zusammengesetzten Index
  • definiert den Tisch als Bereich an einem Tag des begrenzten partitioniert, Woche oder Anfangs- und Endzeitstempel des Monats, wenn die Kardinalität und die Verteilung dies rechtfertigen; oder
  • sogar den Zeitstempel aus den Indexschlüsseln insgesamt entfernen und mit dem eindeutigen Index speichern.

Alle abhängig von den Abfrageeigenschaften.

Verwandte Themen