Frage

Wenn Sie erstellen eine temporäre Tabelle innerhalb einer gespeicherten Prozedur und möchten, fügen Sie einen index oder zwei, um die Leistung zu verbessern, ohne zusätzliche Aussagen gegen ihn, was ist der beste Ansatz?Sybase sagt diese:

"die Tabelle Daten enthalten muss, wenn der index erstellt wird.Wenn Sie beim erstellen der temporären Tabelle, und erstellen Sie den index auf einen leeren Tisch, Adaptive Server keine Spalte Statistiken, wie z.B. Histogramme und dichten.Wenn Sie Daten einfügen Zeilen nach der Erstellung der index, der optimizer verfügt über unvollständige Statistiken."

aber kürzlich hat ein Kollege erwähnte, dass, wenn ich die temporäre Tabelle und Indizes in einer anderen gespeicherten Prozedur, die eine, die tatsächlich verwendet die temporäre Tabelle, dann Adaptive Server-Optimierungstool wird in der Lage sein, Sie zu gebrauchen.

Auf das ganze, ich bin kein großer fan von wrapper-Verfahren hinzufügen, dass wenig Wert habe, also habe ich nicht wirklich dazu gekommen zu testen, aber ich dachte, ich würde die Frage gestellt werden, da draußen, um zu sehen, ob jemand irgendwelche anderen Ansätze oder Tipps?

War es hilfreich?

Lösung

Ein paar Gedanken:

  • Wenn die temporäre Tabelle so groß ist, dass Sie indizieren sie haben, dann gibt es einen besseren Weg, um das Problem zu lösen?
  • Sie können es zwingen, den Index zu verwenden (wenn Sie sicher sind, dass der Index der richtige Weg ist, um die Tabelle zuzugreifen) durch einen optimiser Hinweis geben, in der Form:

    SELECT * 
    FROM   #table (index idIndex) 
    WHERE  id = @id
    

Wenn Sie in Performance-Tipps im Allgemeinen interessiert sind, ich habe ein paar andere Fragen darüber beantwortet mit einiger Ausführlichkeit hier:

Andere Tipps

Was ist das Problem mit dem Hinzufügen von Indizes, nachdem Sie Daten in die temporären Tabelle setzen?

Eine Sache, die Sie bewusst sein müssen, ist die Sichtbarkeit des Index auf andere Instanzen des Verfahrens, das zur gleichen Zeit ausgeführt werden kann.

Ich mag eine guid auf diese Art von temporären Tabellen hinzufügen (und zu dem Indizes), um sicherzustellen, gibt es nie einen Konflikt. Ein weiterer Vorteil dieses Ansatzes besteht darin, dass man einfach die temporäre Tabelle eine echte Tabelle machen könnte.

Also, stellen Sie sicher, dass Sie die Daten in diesen temporären Tabellen mehr als einmal während der Ausführung der gespeicherten Prozedur, da sonst die Kosten für die Indexerstellung abfragen müssen den Nutzen für die Auswahl aufwiegen .

In Sybase, wenn Sie eine temporäre Tabelle erstellen und dann in einer verwenden proc der Plan für die Auswahl gebaut wird, um eine Schätzung von 100 Zeilen in der Tabelle. (Der Plan gebaut wird, wenn das Verfahren beginnt, bevor die Tische besetzt sind.) Dies kann gescannt in der temporären Tabelle Wesen Tabelle führen, da es nur „100 Zeilen“. eine andere proc Aufruf bewirkt, dass Sybase den Plan für die Auswahl mit der tatsächlichen Anzahl der Zeilen bauen, ermöglicht dies der Optimierer einen besseren Index zu holen zu verwenden. Ich habe erhebliche improvedments gesehen, wie manchmal mit diesem Ansatz aber Test auf Ihrer Datenbank gibt es keinen Unterschied.

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