Problem mit Group By Performance



Hallo,
folgende Abfrage bereitet mir Kummer:

SELECT
LEFT(TrmDateTime, 7) as "Month",
COUNT(*) AS "Transactions (Number)",
FORMAT(SUM(amount),2) AS "Transactions (EUR)",
COUNT(CASE WHEN matchesfraud = 1 THEN 1 ELSE null END) AS "Fraud
(Number)",
FORMAT(SUM(CASE WHEN matchesfraud = 1 THEN amount ELSE null END),2)
AS "Fraud (EUR)"
FROM
epfp2_all
GROUP BY LEFT(TrmDateTime, 7)
ORDER BY NULL;


efp2_all ist ein View auf mehrere Tabellen, in denen monatsweise
Transaktionen abgelegt sind. In jeder dieser Tabellen liegt ein Index
auf TrmDateTime (einer Datumsspalte). Insgesamt sind ca. 30 Millionen
Datensätze in diesen Tabellen.

Die Anzahl der Ergebniszeilen ist sechs, da nur sechs Monate
vorgehalten sind.

Nun geht meine Datenbank (MySQL 5.0.18 auf Windows XP, Single Opteron
2GHz, 3GB RAM) derart vor, daß es zunächst eine temporäre Tabelle
anlegt und dorthin eine Menge Daten kopiert. Das dauert natürlich
Ewigkeiten und ich bekam dann irgendwann eine Fehlermeldung, der Index
auf dieser temporären Tabelle sei kaputt.

Nun frage ich mich: Muß das sein? Eigentlich sollte ein einfacher
Table Scan doch ausreichen. Genau das machen nämlich Oracle und DB2
bei dieser Abfrage, das habe ich schon probiert. Gibt es eine
Möglichkeit meine obige Abfrage umzuformulieren, so daß ich mit einem
einfachen Tablescan und ohne die temporäre Tabelle auskomme?

Ach ja, was ich schon ausprobiert habe:
- Im View eine zusätzliche Spalte "Monat" mit Definition
LEFT(TrmDateTime, 7) angelegt und darüber gruppiert.
- Statt "LEFT(TrmDateTime, 7)" habe ich "DATE(TrmDateTime) verwendet
- SQL_SMALL_RESULT verwendet

.... allles ohne Erfolg.

Wer hat Ideen? Danke.


Grüße, Nikolaus

.



Relevant Pages

  • Re: Geschwindigkeit Access Abfrage
    ... Was ist nun der bessere weg bzw. für die normale Suche ... In Access eine Abfrage erstellen, ... Ohne einen Index auf den Suchspalten macht das keinen Unterschied. ... System für alle Tabellen die auf die Tabelle verweisen ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)
  • Re: Fehler bei Index
    ... > Bei der Abfrage sortiereich nach diesem Index ... Bei einem Deadlock liegt kein Fehler in der ... in Verbindung mit anderen Tabellen zu einem ...
    (microsoft.public.de.sqlserver)
  • Re: Access-Abfrage auf SQL-Datenbank
    ... > In der Datenbank sind einige Tabellen, bei denen mit Index ... > Wenn ich jetzt eine Abfrage auf den letzten Index-Wert ...
    (microsoft.public.de.access)
  • [OT]Re: SummeWennS + Datentyp Datum pruefen auf groesser kleiner gleich
    ... Kategorien / etc.) einmal erstellt, ist der Rest mit Abfragen gut zu meistern. ... Und hast du einmal eine Abfrage erstellt (z.B. ... In meiner Firma wird mit Tabellen hantiert, das kann ich kaum mit ansehen. ... Bist du auf dem Weg, ...
    (microsoft.public.de.excel)
  • =?iso-8859-1?Q?Re:_Pivot:_Viele_W=F6rter_z=E4hlen?=
    ... Er muss nämlich eine Menge Daten auswerten. ... Dort wird dann der SQL-String erstellt, der die eigentliche Abfrage ... Weil "Tabellen" per default gecheckt war, dachte ich, es hat schon alles seine Richtigkeit. ... Wenn ich daraus eine PT bekomme, die alles in einer Spalte auswertet und mir korrekt die Anzahl der X und A sagt, ist es korrekt. ...
    (microsoft.public.de.excel)