LIMIT und ORDER BY vs. Rows_examined

Hallo zusammen,

ich habe gerade ein Verständnisproblem!
query: "SELECT id FROM tabelle ORDER BY id LIMIT 0,5"

(id ist PRIMARY)

Warum werden trotzdem alle Zeilen durchsucht? Wieso stoppt mysql nicht
nach den ersten 5 gefundenen? Sortiert sind sie doch alle durch den Index.

Grüße
Martin
Martin Zemke [ Di, 21 August 2007 21:48 ] [ ID #1801146 ]

Re: LIMIT und ORDER BY vs. Rows_examined

Martin Zemke <newsgroup [at] zemkedesign.de> wrote:
>
> ich habe gerade ein Verständnisproblem!
> query: "SELECT id FROM tabelle ORDER BY id LIMIT 0,5"
>
> (id ist PRIMARY)
>
> Warum werden trotzdem alle Zeilen durchsucht? Wieso stoppt mysql nicht
> nach den ersten 5 gefundenen? Sortiert sind sie doch alle durch den Index.

Offensichtlich entscheidet sich der Optimizer für einen anderen Weg,
diese Query auszuführen (vermutlich für einen Tablescan und vermutlich
weil da nur eine handvoll Zeilen sind). Genaueres könnte EXPLAIN zutage
fördern.


XL
Axel Schwenke [ Mi, 22 August 2007 01:01 ] [ ID #1802107 ]

Re: LIMIT und ORDER BY vs. Rows_examined

Axel Schwenke schrieb:
> Martin Zemke <newsgroup [at] zemkedesign.de> wrote:
>> ich habe gerade ein Verständnisproblem!
>> query: "SELECT id FROM tabelle ORDER BY id LIMIT 0,5"
>>
>> (id ist PRIMARY)
>>
>> Warum werden trotzdem alle Zeilen durchsucht? Wieso stoppt mysql nicht
>> nach den ersten 5 gefundenen? Sortiert sind sie doch alle durch den Index.
>
> Offensichtlich entscheidet sich der Optimizer für einen anderen Weg,
> diese Query auszuführen (vermutlich für einen Tablescan und vermutlich
> weil da nur eine handvoll Zeilen sind). Genaueres könnte EXPLAIN zutage
> fördern.
>
>
> XL

EXPLAIN SELECT id FROM tabelle ORDER BY id LIMIT 0,5
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE tabelle index NULL PRIMARY 4 NULL 321919 Using index

Hilft irgendwie wenig. Leider
Martin Zemke [ Mi, 22 August 2007 17:13 ] [ ID #1802119 ]

Re: LIMIT und ORDER BY vs. Rows_examined

Axel Schwenke schrieb:
> Martin Zemke <newsgroup [at] zemkedesign.de> wrote:
>> ich habe gerade ein Verständnisproblem!
>> query: "SELECT id FROM tabelle ORDER BY id LIMIT 0,5"
>>
>> (id ist PRIMARY)
>>
>> Warum werden trotzdem alle Zeilen durchsucht? Wieso stoppt mysql nicht
>> nach den ersten 5 gefundenen? Sortiert sind sie doch alle durch den Index.
>
> Offensichtlich entscheidet sich der Optimizer für einen anderen Weg,
> diese Query auszuführen (vermutlich für einen Tablescan und vermutlich
> weil da nur eine handvoll Zeilen sind). Genaueres könnte EXPLAIN zutage
> fördern.
>
>
> XL
query: "EXPLAIN SELECT id FROM tabelle ORDER BY id LIMIT 0,5"

id 1
select_type SIMPLE
table tabelle
type index
possible_keys NULL
key PRIMARY
key_len 4
ref NULL
rows 321919
Extra Using index

Hilft irgendwie nicht viel. Leider!
Hat jemand eine Ahnung?
Martin Zemke [ Mi, 22 August 2007 17:15 ] [ ID #1802120 ]

Re: LIMIT und ORDER BY vs. Rows_examined

Martin Zemke!

> query: "EXPLAIN SELECT id FROM tabelle ORDER BY id LIMIT 0,5"
[..]
> rows 321919
> Extra Using index
>
> Hilft irgendwie nicht viel. Leider!

Aber da steht doch, dass er einen Index benutzt?

Aus welchem Grund gehst du davon aus, dass das nicht funktioniert? Ich
hoffe, nicht wegen "rows"? Ist die Abfrage speziell langsam?


Gruß
Daniel
Daniel Fischer [ Mi, 22 August 2007 19:37 ] [ ID #1802125 ]

Re: LIMIT und ORDER BY vs. Rows_examined

Martin Zemke <newsgroup [at] zemkedesign.de> wrote:
>> Martin Zemke <newsgroup [at] zemkedesign.de> wrote:

>>> ich habe gerade ein Verständnisproblem!
>>> query: "SELECT id FROM tabelle ORDER BY id LIMIT 0,5"
>>>
>>> Warum werden trotzdem alle Zeilen durchsucht? Wieso stoppt mysql nicht
>>> nach den ersten 5 gefundenen? Sortiert sind sie doch alle durch den Index.

> EXPLAIN SELECT id FROM tabelle ORDER BY id LIMIT 0,5
>
> id 1
> select_type SIMPLE
> table tabelle
> type index
> possible_keys NULL
> key PRIMARY
> key_len 4
> ref NULL
> rows 321919
> Extra Using index
>
> Hilft irgendwie nicht viel. Leider!
> Hat jemand eine Ahnung?

Ja klar. Die Query wird genau so ausgeführt, wie man das erwarten
würde: ein Index Scan (type: index) auf dem PK (key: PRIMARY) ohne
die Records selber anzusehen (Extra: Using index). Die Anzahl Rows
ist zweitrangig, weil die Daten in der gewünschen Sortier-Reihen-
folge gefunden werden und damit nach 5 Treffern abgebrochen werden
kann. Merkwürdig ist dann nur, warum Examined_rows im Ergebnis auf
die Gesamtzahl und nicht auf den richtigen Wert gesetzt wird.


XL
Axel Schwenke [ Mi, 22 August 2007 20:59 ] [ ID #1802127 ]
Datenbanken » de.comp.datenbanken.mysql » LIMIT und ORDER BY vs. Rows_examined

Vorheriges Thema: Datenbank importieren
Nächstes Thema: MySQL Ausgabe optimieren