Ich habe eine MySQL-AbfrageZeilen Spalte in Query Plan
SELECT TE.company_id,
SUM(TE.debit- TE.credit) As summation
FROM Transactions T JOIN Transaction_E TE2
ON (T.parent_id = TE2.transaction_id)
JOIN Transaction_E TE
ON (TE.transaction_id = T.id AND TE.company_id IS NOT NULL)
JOIN Accounts A
ON (TE2.account_id=A.id AND A.deactivated_timestamp=0)
WHERE (TE.company_id IN (1,2))
AND A.user_id=2341 GROUP BY TE.company_id;
Wenn ich die Abfrage erklären, ist der Plan für sie wie (Gesamt):
| Select type | table | type | rows |
-------------------------------------
| SIMPLE | A | ref | 2 |
| SIMPLE | TE2 | ref | 17 |
| SIMPLE | T | ref | 1 |
| SIMPLE | TE | ref | 1 |
Aber wenn ich ein count (*) für die gleiche Abfrage (anstelle von SUM (..)), dann zeigt es, dass es ~ 40k Zeilen für eine bestimmte company_id gibt. Was ich nicht verstehe ist, warum der Abfrageplan zeigt, dass nur wenige Zeilen gescannt werden, während mindestens 40.000 Zeilen verarbeitet werden. Was bedeutet die Zeilenspalte im Abfrageplan? Stellt es nicht die Anzahl der Zeilen dar, die in dieser Tabelle verarbeitet werden? In diesem Fall sollte es höchstens 2 * 17 * 1 * 1 = 34 Reihen sein?
Danke für die Antwort, aber es ist immer noch ein großer Unterschied zwischen dem, was es vorschlägt (~ 34 Zeilen) und was es endet (40k Zeilen). Wie kommt es mit diesen Zahlen? diese Zahlen sehen mich jetzt zufällig – Denorm