Autor | Zpráva | ||
---|---|---|---|
Jan Tvrdík Profil |
#1 · Zasláno: 13. 11. 2008, 19:42:51 · Upravil/a: Jan Tvrdík
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 |
#2 · Zasláno: 13. 11. 2008, 19:47:06
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 |
#3 · Zasláno: 13. 11. 2008, 19:50:39
„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 |
#4 · Zasláno: 13. 11. 2008, 19:54:15
Treba pri pouziti ORDER BY by to ani jinak neslo. Provede se SELECT s podminkou -> sort -> LIMIT
|
||
Jan Tvrdík Profil |
#5 · Zasláno: 13. 11. 2008, 19:57:55
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 |
#6 · Zasláno: 13. 11. 2008, 20:04:48
Jan Tvrdík
Myslím že ne, vždy se vybere milion záznamů a ten se pak ořízne pomocí LIMITU. |
||
bohyn Profil |
#7 · Zasláno: 13. 11. 2008, 20:18:39 · Upravil/a: bohyn
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 * |
#8 · Zasláno: 14. 11. 2008, 08:12:09
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 |
#9 · Zasláno: 14. 11. 2008, 08:31:12
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. |
||
Časová prodleva: 15 let
|
0