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