AugustQ: MYSQL LIMIT immer am Ende der Anweisung

Beitrag lesen

Tach!

LIMIT muß am Ende stehen, denn vorher werden die Daten ausgewählt, danach sortiert, und anschliessend an den Aufrufer zurückgegeben. Dabei werden im Falle dieses Statements nur 10 Sätze zurückgegeben.
Das kann heissen: Dein Select liefert 10 Mio. Datensätze, die dann sortiert werden und anschliessend werden die ersten 10 Sätze zurückgegeben (zeitaufwendig, da alle 10 Mio. Datensätze sortiert werden müssen).

Theoretisch ja, praktisch kann MySQL abkürzen, wenn es einen Index verwenden kann, denn dann werden anhand des Indexes die ersten 10 genommen, ohne dass vorher aufwendig zusammengesucht und sortiert werden muss.

Willst Du nur 10 Sätze selektieren und diese sortiert ausgeben, musst Du ein Sub-Select verwenden.

Wie soll das gehen?

dedlfix.

Tach!

zum Punkt #1: meine Aussage bezog sich auf einen full table scan. Es kann sein, daß MySQL (oder MariaDB) unter Verwendung eines Index schneller zum Ziel kommt, da müsste ich erst nachsehen.

zum Punkt #2: ich habe hier eine Tabelle mit 10 Mio. Datensätzen und verwende die einfach mal. So sieht das au (Darstellung habe ich gekürzt:

  
mysql> select * from ABDAOK order by PZN limit 10;  
    .....................  
10 rows in set (14,94 sec)  
  
mysql> select A.* from (select * from ABDAOK limit 10) A order by PZN;  
    .....................  
10 rows in set (0,01 sec)  

Die Ausgaben unterscheiden sich, da im ersten Fall alle Datensätze sortiert werden müssen und danach werden aus dieser Liste die ersten 10 genommen; im zweiten Fall werden die ersten 10 Datensätze genommen und diese sortiert.

Schönen Gruß
AugustQ

PS: auf dieser Tabelle liegt kein Index.