Re: PDO: Wie Anzahl der Ergebnisse abfragen?

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 01.09.2007 18:47:58 von Claus Reibenstein

Christian Aigner schrieb:

> Nachdem hier viele mit PDO arbeiten, hab ich nun auch mal einen Blick
> darauf geworfen.

Falsche Gruppe. de.comp.lang.php.datenbanken existiert. Ich leite Dich
mal weiter (deshalb auch Fullquote).

> Und bin über ein ganz einfaches Problem gestolpert:
>
> Wie bestimme ich die Anzahl der Ergebnisse, die mir ein SELECT
> zurückliefert?
>
> Bei MDB2 und auch bei mysqli gibt's ja die Funktion numRows() dafür.
> Gibt's sowas auch für PDO?
>
> Konkretes Beispiel:
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> $sql = 'SELECT * FROM personen WHERE vorname=?';
> $value = array('Hans');
> $prepared = $db->prepare($sql);
>
> if ($prepared->execute($value)) {
>
> $count = ...(hier fehlt mir die PDO-Funktion)
> echo 'Gefunden: '.$count.'
';
>
> while ($row = $prepared->fetch(PDO::FETCH_ASSOC)) {
> echo $row['vorname'].' '.$row['nachname'].'
';
> }
> }
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> Natürlich könnte ich auch ein COUNT(*) vorher abfragen, aber das
> erscheint mir nicht sehr elegant.

Dazu habe ich im Handbuch dieses hier gefunden:

,----------
| For most databases, PDOStatement->rowCount() does not return the
| number of rows affected by a SELECT statement. Instead, use
| PDO->query() to issue a SELECT COUNT(*) statement with the same
| predicates as your intended SELECT statement, then use
| PDOStatement->fetchColumn() to retrieve the number of rows that will
| be returned. Your application can then perform the correct action.
`----------

Toll, was? :-(

Fragt sich nur, ob Deine Datenbank (welche eigentlich?) zu den "most
databases" zählt. Und selbst wenn nicht, besteht immer noch die Gefahr,
dass die Zahl, die Du mit SELECT COUNT(*) ermittelt hast, bis zum
eigentlichen Query schon nicht mehr stimmt :-(

Das ist nicht nur nicht elegant, das ist totale 5(|-|3!523 :-(

Da scheint also noch etwas Elementares zu fehlen bei PDO.

> mfg,
> Christian

Gruß. Claus

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 01.09.2007 20:05:51 von oliver.graetz

Claus Reibenstein schrieb:
> Christian Aigner schrieb:
>=20
>> Nachdem hier viele mit PDO arbeiten, hab ich nun auch mal einen Blick
>> darauf geworfen.
>=20
> Falsche Gruppe. de.comp.lang.php.datenbanken existiert. Ich leite Dich
> mal weiter (deshalb auch Fullquote).
>=20
>> Und bin über ein ganz einfaches Problem gestolpert:
>>
>> Wie bestimme ich die Anzahl der Ergebnisse, die mir ein SELECT
>> zurückliefert?
>>
>> Bei MDB2 und auch bei mysqli gibt's ja die Funktion numRows() dafür.=

>> Gibt's sowas auch für PDO?
>>
>> Konkretes Beispiel:
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> $sql =3D 'SELECT * FROM personen WHERE vorname=3D?';
>> $value =3D array('Hans');
>> $prepared =3D $db->prepare($sql);
>>
>> if ($prepared->execute($value)) {
>>
>> $count =3D ...(hier fehlt mir die PDO-Funktion)
>> echo 'Gefunden: '.$count.'
';
>>
>> while ($row =3D $prepared->fetch(PDO::FETCH_ASSOC)) {
>> echo $row['vorname'].' '.$row['nachname'].'
';
>> }
>> }
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>> Natürlich könnte ich auch ein COUNT(*) vorher abfragen, aber das
>> erscheint mir nicht sehr elegant.

PDO hat leider keine brauchbare numrows-Unterstützung. Ist tatsächlic=
h
ziemlich blöd, weil diese Info z.B. bei MySQL meist auch dann verfügb=
ar
ist, wenn man eine ungepufferte Query durchgeführt hat. Letztendlich is=
t
das aber sauberer, denn man will - sobald die Anwendung etwas "fertiger"
wird, meist eh nicht mehr wissen, wieviele Zeilen das Ergebnis dieser
Query hat, sondern wieviele Zeilen das Ergebnis haben KÖNNTE, wenn man
den LIMIT-Teil weggelassen HÄTTE ;-)

In der Prototyping-Phase kannst du mit fethcAll arbeiten, also alle
Ergebnisse auf einmal nach PHP ziehen. Die Anzahl bekommst du dann mit
einem simplen count() für das Array. Später solltest du mit einer
gesonderten COUNT(*) Anfrage arbeiten. Mein Wrapper bietet mir das
übrigens automatisiert für die letzte Query an...

OLLi

--=20
Bree: Is my daughter alright?
Doctor: She'll be fine. The wounds are very superficial.
Andrew: (smirks) So is the patient.

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 03.09.2007 08:34:07 von bruening

Oliver Grätz schrieb:
> PDO hat leider keine brauchbare numrows-Unterstützung. Ist tatsächlich
> ziemlich blöd, weil diese Info z.B. bei MySQL meist auch dann verfügbar
> ist, wenn man eine ungepufferte Query durchgeführt hat. Letztendlich ist
> das aber sauberer, denn man will - sobald die Anwendung etwas "fertiger"
> wird, meist eh nicht mehr wissen, wieviele Zeilen das Ergebnis dieser
> Query hat, sondern wieviele Zeilen das Ergebnis haben KÖNNTE, wenn man
> den LIMIT-Teil weggelassen HÄTTE ;-)

Was spricht in diesem Zusammenhang gegen SQL_CALC_FOUND_ROWS und
FOUND_ROWS()? Wozu hier PDO belangen?


Gruß,
Habbo

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 23.09.2007 20:23:53 von oliver.graetz

Jan Habbo Brüning schrieb:
> Oliver Grätz schrieb:
>> PDO hat leider keine brauchbare numrows-Unterstützung. Ist tatsäch=
lich
>> ziemlich blöd, weil diese Info z.B. bei MySQL meist auch dann verfü=
gbar
>> ist, wenn man eine ungepufferte Query durchgeführt hat. Letztendlich=
ist
>> das aber sauberer, denn man will - sobald die Anwendung etwas "fertige=
r"
>> wird, meist eh nicht mehr wissen, wieviele Zeilen das Ergebnis dieser
>> Query hat, sondern wieviele Zeilen das Ergebnis haben KÖNNTE, wenn m=
an
>> den LIMIT-Teil weggelassen HÄTTE ;-)
>=20
> Was spricht in diesem Zusammenhang gegen SQL_CALC_FOUND_ROWS und=20
> FOUND_ROWS()? Wozu hier PDO belangen?

Zunächst mal habe ich hier extra dick angestrichen im Konditional
formuliert. Unter den Grundbedingungen ist die numrows-Unterstützung de=
r
klassischen API tatsächlich etwas, dass man unter PDO vermisst, wenn ma=
n
nicht grundsätzlich mit fetchAll arbeiten möchte. Hier stellt PDO ein=
en
Wert nicht an den Nutzer durch, der im DBMS bekannt ist. Das finde ich
schlampig.

Dann bin ich zu "fertigen" Queries übergegangen und habe gesagt, dass
man dann meist sowieso gesonderte Queries benötigt. Dabei habe ich auf
eine COUNT(*) Lösung verwiesen. Natürlich kann man meist auch mit
SQL_CALC_FOUND_ROWS arbeiten, aber nicht in ALLEN Fällen, denn es gibt
Einschränkungen, zum Beispiel im Zusammenhang mit UNION. Im Übrigen
funktioniert der SQL_CALC_FOUND_ROWS Ansatz nur bei Nutzung von
Transaktionen zuverlässig (obwohl der Wert seitens MySQL pro Connection=

gespeichert wird) und eben die unterstützt das (leider) immer noch
meistverwendete MyISAM Tabellenformat nicht.

OLLi

--=20
X:"I was working hard for that money."
S:"And I didn't?"
X:"You stole it."
S:"And you're making it very hard work"
[Buffy 514]

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 23.09.2007 20:28:30 von oliver.graetz

Jan Habbo Brüning schrieb:
>=20
> Was spricht in diesem Zusammenhang gegen SQL_CALC_FOUND_ROWS und=20
> FOUND_ROWS()? Wozu hier PDO belangen?

Ach ja richtig, ich vergaß: COUNT(*) ist auch noch meist schneller als
SQL_CALC_FOUND_ROWS, weil bei letzterem alle LIMIT-Optimierungen
entfallen müssen.

OLLi

--=20
It's redundant! It's redundant!
[R. E. Dundant]

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 24.09.2007 08:17:46 von bruening

Oliver Grätz schrieb:
> Ach ja richtig, ich vergaß: COUNT(*) ist auch noch meist schneller als
> SQL_CALC_FOUND_ROWS, weil bei letzterem alle LIMIT-Optimierungen
> entfallen müssen.

Dann erkläre mir bitte, wie du mit COUNT(*) ohne LIMIT Angabe in einem
Query deine gewünschten Datensätze ermittelst und gleichzeitig
berechnest, wie viele Datensätze es insgesamt gibt.


Gruß,
Habbo


PS: Um es vorwegzunehmen: Ich denke beide von dir oben getätigten
Aussagen sind schlichtweg falsch!

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 24.09.2007 08:56:20 von Claus Reibenstein

Jan Habbo Brüning schrieb:

> Oliver Grätz schrieb:
>
>> Ach ja richtig, ich vergaß: COUNT(*) ist auch noch meist schneller als
>> SQL_CALC_FOUND_ROWS, weil bei letzterem alle LIMIT-Optimierungen
>> entfallen müssen.
>
> Dann erkläre mir bitte, wie du mit COUNT(*) ohne LIMIT Angabe in einem
> Query deine gewünschten Datensätze ermittelst und gleichzeitig
> berechnest, wie viele Datensätze es insgesamt gibt.

Wie kommst Du auf "gleichzeitig"?

Du startest eine Abfrage mit COUNT, aber ohne ORDER BY und LIMIT, und
bekommst die Anzahl der Datensätze. Dann startest Du eine zweite Abfrage
ohne COUNT, aber mit ORDER BY und LIMIT, und bekommst die gewünschten
Datensätze.

> PS: Um es vorwegzunehmen: Ich denke beide von dir oben getätigten
> Aussagen sind schlichtweg falsch!

Nicht unbedingt. Der Nachteil, zwei Queries statt einer absetzen zu
müssen, kann durch den Vorteil der besseren Optimierungsmöglichkeiten
der beiden Einzel-Queries gegenüber einer Query mit SQL_CALC_FOUND_ROWS
durchaus wieder wettgemacht werden. Ob dem so ist, hängt wohl vom
Einzelfall ab.

Aber welches war die zweite Aussage, die Deiner Meinung nach falsch ist?
Ich sehe oben nur eine.

Gruß. Claus

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 24.09.2007 09:45:24 von bruening

Claus Reibenstein schrieb:
> Aber welches war die zweite Aussage, die Deiner Meinung nach falsch ist?
> Ich sehe oben nur eine.

Das man bei SQL_CALC_FOUND_ROWS das Keyword LIMIT weglassen müsste.

Dadurch sollte sich auch der Rest klären.

Ich habe da zwar keine messtechnischen Belege für, aber mir erscheint es
einfach logisch, dass die Variante "1 Query und danach nur noch SQL
Variable abfragen" zwangsweise schneller sein wird, als "1 Query für
Daten holen + plus ein COUNT(*) Query zum Zusammenrechnen der
Ergebnisse". In Bezug auf COUNT(*) einfach mal folgendes auf dem
Newsreader zergehen lassen:

"Die allgemeinste Art und Weise, eine GROUP BY-Klausel zu erfüllen,
besteht darin, die gesamte Tabelle zu scannen und eine neue
Temporärtabelle zu erstellen, in der alle Datensätze aus allen Gruppen
aufeinander folgend aufgeführt sind, und dann mithilfe dieser
Temporärtabelle Gruppen zu erkennen und – sofern möglich –
Zusammenfassungsfunktionen anzuwenden." [1]


Schöne Grüße,
Habbo


[1] http://dev.mysql.com/doc/refman/5.1/de/group-by-optimization .html

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 24.09.2007 14:00:00 von Claus Reibenstein

Jan Habbo Brüning schrieb:

> Claus Reibenstein schrieb:
>
>> Aber welches war die zweite Aussage, die Deiner Meinung nach falsch ist?
>> Ich sehe oben nur eine.
>
> Das man bei SQL_CALC_FOUND_ROWS das Keyword LIMIT weglassen müsste.

Das steht da nicht. Bitte lies noch einmal genau.

Gruß. Claus

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 24.09.2007 14:09:47 von bruening

Claus Reibenstein schrieb:
> Das steht da nicht. Bitte lies noch einmal genau.

Er hat wortwörtlich gesagt:

"[...] weil bei letzterem alle LIMIT-Optimierungen
entfallen müssen."

Erkläre mir doch bitte, was ich daran falsch verstanden habe.


Gruß,
Habbo

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 24.09.2007 15:26:03 von Claus Reibenstein

Jan Habbo Brüning schrieb:

> Claus Reibenstein schrieb:
>
>> Das steht da nicht. Bitte lies noch einmal genau.
>
> Er hat wortwörtlich gesagt:
>
> "[...] weil bei letzterem alle LIMIT-Optimierungen
> entfallen müssen."

Eben.

> Erkläre mir doch bitte, was ich daran falsch verstanden habe.

Offenbar meine Aufforderung, noch einmal genau zu lesen.

Es geht um die Optimierungen, die MySQL durchführt, wenn LIMIT angegeben
ist. Diese kann MySQL logischerweise nicht vollständig durchführen, wenn
SQL_CALC_FOUND_ROWS ebenfalls angegeben ist.

Steht alles im Handbuch.

Gruß. Claus

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 24.09.2007 16:56:37 von bruening

Claus Reibenstein schrieb:
> Jan Habbo Brüning schrieb:
>> Erkläre mir doch bitte, was ich daran falsch verstanden habe.
>
> Offenbar meine Aufforderung, noch einmal genau zu lesen.

Das war auf seine Aussage bezogen und das weißt du auch.

> Es geht um die Optimierungen, die MySQL durchführt, wenn LIMIT angegeben
> ist. Diese kann MySQL logischerweise nicht vollständig durchführen, wenn
> SQL_CALC_FOUND_ROWS ebenfalls angegeben ist.

Das wusste ich nicht. Trotzdem fällt es mir schwer zu glauben, dass der
Verzicht auf Optimierung hier mehr Performance kostet, als der Verzicht
auf Indexe.

> Steht alles im Handbuch.

Ja sicher, alles steht irgendwo. Im Zuge einer solchen Diskussion darf
man auch gerne zitieren, es geht hier schließlich (auch im Rahmen dieser
NG) nicht um Allgemeinwissen.


Gruß,
Habbo

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 24.09.2007 19:19:32 von Claus Reibenstein

Jan Habbo Brüning schrieb:

> Claus Reibenstein schrieb:
>
>> Jan Habbo Brüning schrieb:
>>
>>> Erkläre mir doch bitte, was ich daran falsch verstanden habe.
>>
>> Offenbar meine Aufforderung, noch einmal genau zu lesen.
>
> Das war auf seine Aussage bezogen und das weißt du auch.

Dein Ironiedetektor scheint kaputt zu sein ...

Natürlich weiß ich das, und das weißt Du auch.

>> Es geht um die Optimierungen, die MySQL durchführt, wenn LIMIT angegeben
>> ist. Diese kann MySQL logischerweise nicht vollständig durchführen, wenn
>> SQL_CALC_FOUND_ROWS ebenfalls angegeben ist.
>
> Das wusste ich nicht. Trotzdem fällt es mir schwer zu glauben, dass der
> Verzicht auf Optimierung hier mehr Performance kostet, als der Verzicht
> auf Indexe.

Warum bringt Du jetzt plötzlich etwas Neues ins Spiel, von dem bislang
noch gar nicht die Rede war? Versuchst Du, vom Thema abzulenken? Warum?
Wozu?

Oder habe ich ein Posting übersehen? Das Stichwort "Index" finde ich
jedenfalls nirgends.

>> Steht alles im Handbuch.
>
> Ja sicher, alles steht irgendwo. Im Zuge einer solchen Diskussion darf
> man auch gerne zitieren, es geht hier schließlich (auch im Rahmen dieser
> NG) nicht um Allgemeinwissen.

Da hätte ich aber ziemlich viel zu zitieren. Das Handbuch widmet der
Optimierung reichlich viele Seiten. Jetzt, wo Du das weißt, sollte es
doch ein Leichtes für Dich sein, Dich da mal durchzugraben. Schließlich
ist das hier kein Handbuchvorlesedienst.

Gruß. Claus

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 24.09.2007 23:36:23 von oliver.graetz

Jan Habbo Brüning schrieb:
> Claus Reibenstein schrieb:
>> Aber welches war die zweite Aussage, die Deiner Meinung nach falsch is=
t?
>> Ich sehe oben nur eine.
>=20
> Das man bei SQL_CALC_FOUND_ROWS das Keyword LIMIT weglassen müsste.
Das habe ich nicht gesagt. Wo hast du das her? Ich habe gesagt, dass
MySQL bei Nutzung von SQL_CALC_FOUND_ROWS keine LIMIT-Optimierung mehr
durchführt. Das ist als Problem bekannt und wird von den Devs als ToDo
behandelt, weil es schwerwiegende Auswirkungen auf die Query-Performance
hat. Die Query wird dadurch im schlimmsten Fall um Größenordnungen
langsamer. Benchmarks zeigen, dass meist zwei aufeinanderfolgende
Anfragen (eine mit LIMIT und danach eine mit COUNT(*) ohne LIMIT)
schneller sind.

OLLi

--=20
David: "Wie gut sind Sie als Hacker?"
Jürgen: "Na für den Hausgebrauch reicht's!"
[ViB]

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 24.09.2007 23:39:06 von oliver.graetz

Jan Habbo Brüning schrieb:
>=20
>> Es geht um die Optimierungen, die MySQL durchführt, wenn LIMIT angeg=
eben
>> ist. Diese kann MySQL logischerweise nicht vollständig durchführen=
, wenn
>> SQL_CALC_FOUND_ROWS ebenfalls angegeben ist.
>=20
> Das wusste ich nicht. Trotzdem fällt es mir schwer zu glauben, dass d=
er=20
> Verzicht auf Optimierung hier mehr Performance kostet, als der Verzicht=
=20
> auf Indexe.
>=20
>> Steht alles im Handbuch.
>=20
> Ja sicher, alles steht irgendwo. Im Zuge einer solchen Diskussion darf =

> man auch gerne zitieren, es geht hier schließlich (auch im Rahmen die=
ser=20
> NG) nicht um Allgemeinwissen.


Wieso zitieren? Ich habe auf deine Aussage hin nochmal im Handbuch unter
SQL_CALC_FOUND_ROWS nachgeschaut und genau dort den Hinweis wieder
gefunden, den ich inzwischen vergessen hatte. Du kennst das ja: Man
verwirft einen Ansatz weil man es recherchiert hat und später weiß ma=
n
nicht mehr genau warum. Die Performanceauswirkungen habe ich beim
erneuten Nachschlagen deiner Angaben wieder entdeckt...

OLLi


--=20
Kajiggers!

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 24.09.2007 23:46:08 von oliver.graetz

Claus Reibenstein schrieb:

>>> Steht alles im Handbuch.
>> Ja sicher, alles steht irgendwo. Im Zuge einer solchen Diskussion darf=
=20
>> man auch gerne zitieren, es geht hier schließlich (auch im Rahmen di=
eser=20
>> NG) nicht um Allgemeinwissen.
>=20
> Da hätte ich aber ziemlich viel zu zitieren. Das Handbuch widmet der
> Optimierung reichlich viele Seiten. Jetzt, wo Du das weißt, sollte es=

> doch ein Leichtes für Dich sein, Dich da mal durchzugraben. Schließ=
lich
> ist das hier kein Handbuchvorlesedienst.

Sehe uch genauso. MySQL ist in punkto Anleitungsqualität ähnlich gut
abgesteckt wie PHP und speziell die Kommentarfunktionen sind oft eine
wertvolle Informationsquelle. Zu JEDEM Thema sollte man immer zunächst
in der Doku nachschlagen. Imvorliegenden Fall ist die Variante mit einer
Query vermutlich bei sehr kleinen Tabellen im Vorteil, mit wachsender
Zahl an Datensätzden dürfte aber der Vorteil des gesparten
Anfrageoverheads gegenüber den ausgelassenene LIMIT-Optimierungen
vernachlässigbar werden.

OLLi


--=20
"You shot people for throwing coffee?"
[A dark moment on BG 204]

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 25.09.2007 08:49:38 von bruening

Claus Reibenstein schrieb:
> Jan Habbo Brüning schrieb:
>> Das wusste ich nicht. Trotzdem fällt es mir schwer zu glauben, dass der
>> Verzicht auf Optimierung hier mehr Performance kostet, als der Verzicht
>> auf Indexe.
>
> Warum bringt Du jetzt plötzlich etwas Neues ins Spiel, von dem bislang
> noch gar nicht die Rede war? Versuchst Du, vom Thema abzulenken? Warum?
> Wozu?

Ich habe das bereits sechs Postings weiter oben im Faden erwähnt, neu
wäre hier also etwas übertrieben dargestellt.


Gruß,
Habbo

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 25.09.2007 16:03:56 von Claus Reibenstein

Jan Habbo Brüning schrieb:

> Claus Reibenstein schrieb:
>
>> Jan Habbo Brüning schrieb:
>>
>>> Das wusste ich nicht. Trotzdem fällt es mir schwer zu glauben, dass der
>>> Verzicht auf Optimierung hier mehr Performance kostet, als der Verzicht
>>> auf Indexe.
>>
>> Warum bringt Du jetzt plötzlich etwas Neues ins Spiel, von dem bislang
>> noch gar nicht die Rede war? Versuchst Du, vom Thema abzulenken? Warum?
>> Wozu?
>
> Ich habe das bereits sechs Postings weiter oben im Faden erwähnt, neu
> wäre hier also etwas übertrieben dargestellt.

Kannst Du dieses "sechs Postings weiter oben" mal in Form einer
Message-ID präzisieren? Ich habe alle Deine Postings in diesem Thread
durchsucht und nirgends das Wort "Index" finden können.

Gruß. Claus

Re: PDO: Wie Anzahl der Ergebnisse abfragen?

am 25.09.2007 17:52:07 von bruening

Claus Reibenstein schrieb:
> Kannst Du dieses "sechs Postings weiter oben" mal in Form einer
> Message-ID präzisieren? Ich habe alle Deine Postings in diesem Thread
> durchsucht und nirgends das Wort "Index" finden können.

Ich habe in der Tat das Wort "Index" nicht benutzt. Anscheinend war das
lediglich eine Folgerung aus der von mir zitierten Passage aus dem
MySQL-Handbuch [1], die durchaus unzutreffend sein kann.

In dem Fall bleibt trotzdem die Frage offen, ob das Kopieren sämtlicher
Treffer in eine Temporäre Tabelle und anschließendes Gruppieren nicht
trotzdem langsamer bleiben, als der Verzicht auf die
LIMIT-Optimierungen. Ich hab leider keine Datensätze hier, mit denen ich
das direkt testen könnte.


Gruß,
Habbo


[1] "Die allgemeinste Art und Weise, eine GROUP BY-Klausel zu erfüllen,
besteht darin, die gesamte Tabelle zu scannen und eine neue
Temporärtabelle zu erstellen, in der alle Datensätze aus allen Gruppen
aufeinander folgend aufgeführt sind, [...]"
http://dev.mysql.com/doc/refman/5.1/de/group-by-optimization .html