Frage

Ist für eine Spalte einen Index erstellen, die summiert wird, ist schneller als ohne Index?

War es hilfreich?

Lösung

Sorry, es ist nicht klar, was Sie fordern.

Sind Sie fragen, wäre es eine Abfrage wie

beschleunigen
SELECT product, sum(quantity) FROM receipts 
GROUP BY product

Wenn Sie selbst hinzugefügt haben einen Index auf Quantität?

Wenn das ist die Frage, dann ist die Antwort nein. Im Allgemeinen Indizes ist hilfreich, wenn Sie nur ein paar Zeilen unter vielen finden müssen; Hier müssen Sie alle Zeilen, so ein Index hilft nicht.

Es ist eine obskure Ausnahme (was wahrscheinlich so selten die meisten DB-Optimierer gilt nicht die Mühe machen, diesen Trick Implementierung). Wenn Ihre Abfrage

sein geschieht
SELECT sum(foo) FROM bar

, wobei es ein Index auf foo und bar ist eine Tabelle mit vielen Spalten, ist es möglich, in dem vollständigen Index zu lesen, als einen kleinen Hit entstehen, wenn Sie die zugrunde liegende Tabelle lesen und erhält die Antwort direkt von der Index - unter nie die „echten“ Tabelle überhaupt zu berühren! Dies ist ein ziemlich seltener Fall, aber, und Sie testen wollen, dass Ihr Optimierer weiß, dies zu tun, bevor zu viel auf diese zu verlassen.

Andere Tipps

Nein. Indizes verbessern sucht durch eine Begrenzung, wie viele Kontrollen erforderlich sind. Eine Aggregatfunktion (Anzahl, max, min, sum, avg) hat unabhängig durch alle Einträge in einer Spalte ausgeführt werden.

Wenn Sie die Summe schneller machen wollen, können Sie das Ergebnis vorge materialisiert. Unter Oracle verwenden Materialized Views , auf MS SQL verwenden indizierte Views .

Auf Ihrer Frage „ist ein Index für eine Spalte erstellen, das summiert wird, wird schneller als ohne Index?“, Antwort ist Nein.

Die Antwort auf Ihre Frage liegt auf Spencers Antwort:

"Eine Aggregatfunktion (count, max, min, sum, avg) hat durch alle Einträge in einer Spalten laufen unabhängig summiert werden."

geklärt einfach den Kontext der Spalten in Spencers Antwort. Seine Antwort ist richtig dennoch.

Wenn der Index abdeckt, wird es in der Regel schneller. Wie viel schneller wird durch die Differenz zwischen der Anzahl der Spalten in der Tabelle im Vergleich zu der Zahl im Index bestimmt werden. Darüber hinaus könnte es schneller sein, wenn es irgendwelche Filterkriterien.

Ich fand die Indizierung eine Spalte in der where (ProductId hier) hilft, wenn Sie diese Abfrage mit:

SELECT productid, SUM (Anzahl) FROM Quittungen WHERE productid = 1 GROUP BY productid

Einer meiner Anfragen von 45 Sekunden ging sofort auf fast sobald ich den Index hinzugefügt.

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