LIMIT und ORDER BY vs. Rows_examined
LIMIT und ORDER BY vs. Rows_examined
am 21.08.2007 21:48:38 von Martin Zemke
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
Re: LIMIT und ORDER BY vs. Rows_examined
am 22.08.2007 01:01:47 von Axel Schwenke
Martin Zemke 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
Re: LIMIT und ORDER BY vs. Rows_examined
am 22.08.2007 17:13:27 von Martin Zemke
Axel Schwenke schrieb:
> Martin Zemke 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
Re: LIMIT und ORDER BY vs. Rows_examined
am 22.08.2007 17:15:11 von Martin Zemke
Axel Schwenke schrieb:
> Martin Zemke 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?
Re: LIMIT und ORDER BY vs. Rows_examined
am 22.08.2007 19:37:44 von Daniel Fischer
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
Re: LIMIT und ORDER BY vs. Rows_examined
am 22.08.2007 20:59:09 von Axel Schwenke
Martin Zemke wrote:
>> Martin Zemke 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