2009-01-13 9 views

Antwort

40

Sorry, es ist nicht klar, was Sie fragen.

Sind Sie fragen, wäre es eine Abfrage wie

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

wenn Sie einen Index auf Menge hinzugefügt beschleunigen?

Wenn das die Frage ist, dann ist die Antwort nein. Im Allgemeinen sind Indizes hilfreich, wenn Sie nur wenige Zeilen unter vielen finden müssen. hier brauchst du alle Zeilen, also hilft ein Index nicht.

Es gibt eine obskure Ausnahme (die so selten zutrifft, dass die meisten DB-Optimierer diesen Trick wahrscheinlich nicht anwenden). Wenn Ihre Abfrage

SELECT sum(foo) FROM bar 

passiert sein, wo es ein Index auf foo und bar ist eine Tabelle mit vielen Spalten, ist es möglich, in dem vollständigen Index zu lesen, einen kleineren Hit als entstehen, wenn Sie das lesen darunterliegende Tabelle, und erhalten Sie die Antwort direkt aus dem Index - nie den "echten" Tisch überhaupt berühren! Dies ist jedoch ein ziemlich seltener Fall, und Sie sollten testen, ob Ihr Optimierer dies weiß, bevor er sich zu sehr darauf verlässt.

+1

+1, weil es eine interessante Verwendung von Indizes ist. – NotMe

+1

+1 Guter Rat: um den vom Optimierer erstellten Ausführungsplan anzuzeigen. –

+0

Ist das immer wahr - dass Indizes die SUM-Leistung nicht beeinflussen können?Was ist, wenn wir einen Filterindex verwenden, der anzeigt, dass der Wert NICHT NULL ist? Und wenn wir WHERE-Klausel zu SUM nur bestimmte Werte verwenden, würde ein Index helfen? – gotqn

7

Nein. Indizes verbessern die Suche, indem sie begrenzen, wie viele Prüfungen erforderlich sind. Eine Aggregatfunktion (count, max, min, sum, avg) muss unabhängig von allen Einträgen in einer Spalte laufen.

+0

Wenn jedoch alle diese Spalten im Index selbst vorhanden sind, muss nicht auf die tatsächliche Tabelle zugegriffen werden, wodurch die Summe schneller ist als bei dem Fall ohne Index –

4

Wenn Sie die Summierung beschleunigen möchten, können Sie das Ergebnis vormaterialisieren. Verwenden Sie unter Oracle Materialized Views, unter MS SQL Indexed Views.

auf Ihre Frage „ist ein Index für eine Spalte erstellen, die als kein Index wird schneller summiert wird?“, Antwort ist Nein.

Die Antwort auf Ihre Frage auf Spencers Antwort liegt:

"Eine Aggregatfunktion (count, max, min, sum, avg) muss alle Einträge in einer Spalte durchlaufen, die summiert wird."

Gerade geklärt den Kontext der Spalten in Spencers Antwort. Seine Antwort ist dennoch korrekt.

0

Wenn der Index deckt, wird es im Allgemeinen schneller sein. Wie viel schneller wird durch die Differenz zwischen der Anzahl der Spalten in der Tabelle gegenüber der Anzahl im Index bestimmt. Darüber hinaus könnte es schneller sein, wenn Filterkriterien vorhanden sind.

0

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

SELECT productid, Summe (Menge) aus den Einnahmen WHERE productid = 1 GROUP BY productid

Einer meiner Abfragen ging von 45 Sekunden zu fast sofort, nachdem ich den Index hinzugefügt habe.

+1

Benötigen Sie für eine Produkt-ID die Produkt-ID in der SELECT-Liste? –

+1

yeah, aber wie SquareCog sagte, hilft das Hinzufügen eines Index zu productid, weil Sie Zeilen basierend auf productid finden. In Ihrem Fall stellt sich die Frage, ob das Hinzufügen eines Mengenindexes helfen würde – alex9311