Autor Zpráva
Jan Tvrdík
Profil
Jaký je Váš názor na vkládání "LIMIT 1" do dotazů, kde se vybírá jeden záznam podle PK? Má to nějaké výhody? Má to nějaké nevýhody?
SELECT * FROM table WHERE id = 3 LIMIT 1
joe
Profil
Podle mě to žádný význam nemá, i když to občas někde napíšu. Zkrácení proběhne až po výběru, tzn. že pokud je id jako PK, tak bude vždycky jeden, takže to tam je asi zbytečně.
Jan Tvrdík
Profil
Zkrácení proběhne až po výběru
Jestli je tohle pravda, tak jsem šokován. Vždycky jsem si myslel, že když mám tabulku s milionem záznamů, a dám LIMIT 10, tak po získání 10 záznamů, které vyhoví kritériím hledání ustane a vrátí výsledek. Máš pro to tvrzení nějaký podklad?
bohyn
Profil
Treba pri pouziti ORDER BY by to ani jinak neslo. Provede se SELECT s podminkou -> sort -> LIMIT
Jan Tvrdík
Profil
bohyn
Podle mě provede spíš sort->select -> až dosáhne limit tak vrátí výsledek.

Citace z http://dev.mysql.com/doc/refman/5.0/en/limit-optimization.htm:
If you use LIMIT row_count with ORDER BY, MySQL ends the sorting as soon as it has found the first row_count rows of the sorted result, rather than sorting the entire result. If ordering is done by using an index, this is very fast. If a filesort must be done, all rows that match the query without the LIMIT clause must be selected, and most or all of them must be sorted, before it can be ascertained that the first row_count rows have been found. In either case, after the initial rows have been found, there is no need to sort any remainder of the result set, and MySQL does not do so.
joe
Profil
Jan Tvrdík
Myslím že ne, vždy se vybere milion záznamů a ten se pak ořízne pomocí LIMITU.
bohyn
Profil
Jan Tvrdík
Asi mas pravdu, ale jen castecne. MySQL ma pravdepodobne setridene indexy, takze tam se provede select -> LIMIT. Kdyz ale index nemas a provadis filesort, tak se provede podminka a pak se tridi, ale ne az do konce (algoritmus neznam tam nevim proc ne az do konce :) ). Zvlastni ze sem si nevsim rychlosti trideni s a bez indexu, ikdyz sem to jednou zkousel. Asi sem mel moc malo zaznamu.
Kajman_
Profil *
do dotazů, kde se vybírá jeden záznam podle PK

Tam o významu pochybuji. Ale při limit 10 to může optimalizátorovi pomoci, že hledá pouze prvních 10 - ostatní třídit (či procházet) nemusí. Zkuste si rychlost limit 0,10 a limit 1000000, 10 pro porovnání.
Mastodont
Profil
LIMIT 1 by měl teoreticky zkrátit i dotaz při výběru podle PK, ale zrychlení je na hranici měřitelnosti, pokud to vůbec lze měřit.

pokud je id jako PK, tak bude vždycky jeden
Jistě, ale otázka je, zda to db engine "ví" ... nebo zda hledá v indexu všechny řádky se zadanou hodnotou.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0