Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: LIMIT v databázovém dotazu

Aktivity
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:2.7.2013 12:42

Ahoj, vídám často v dotazech napsáno LIMIT 1, např. v UPDATE, kde programátor ví, že záznam bude max jeden. Je to dobrá praktika a zrychlí to dotazy?

Odpovědět
2.7.2013 12:42
New kid back on the block with a R.I.P
Avatar
chocho
Neregistrovaný
Avatar
chocho:2.7.2013 12:44

jednou jsem to udělal tak. že jsem si připojil sloupec a v něm inkrementoval hodnotu(pokud jsem chjtěl např. LIMIT 15) a pak HAVING a měl jsem to, ale nevím jestli to je rychlé.. :/

 
Nahoru Odpovědět
2.7.2013 12:44
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:2.7.2013 12:52

Po provedení prvního UPDATE by asi tabulka neměla být dál prohledávána a teoreticky by se mohlo něco ušetřit. Nepatří to však k dobrým zvykům. U krátkých tabulek je to jedno, u dlouhých by na daném sloupci měl být index a vlastně by to také mělo být jedno.

Nahoru Odpovědět
2.7.2013 12:52
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:2.7.2013 12:59

Díky, myslel jsem si to. Takže když to je primární klíč té samé tabulky nebo třeba cizí klíč, tak to dál prohledávat nebude.

Nahoru Odpovědět
2.7.2013 12:59
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:2.7.2013 13:06

Také jsem se mezitím dočetl, že používání LIMIT v UPDATE je v jistém ohledu hazard, protože pokud by tam těch položek víc, tak vůbec nevíme, která z nich bude updatována.

Mám takové tušení, že LIMIT v UPDATE je jen rozšířením MySQL, které ve standardu není.

Nahoru Odpovědět
2.7.2013 13:06
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:2.7.2013 15:14

Ještě se chci zeptat, když chci zjistit, jestli v DB existuje alespoň jeden záznam, předpokládám, že se to nedělá countem, ale selectnu si něco s limitem 1 a data pak nevyužiji. Je to tak?

Editováno 2.7.2013 15:14
Nahoru Odpovědět
2.7.2013 15:14
New kid back on the block with a R.I.P
Avatar
David Hynek
Tvůrce
Avatar
David Hynek:2.7.2013 15:24

já tedy nevím, co myslíš konkrétního, ale jestli se má něco updatovat a jedná se o konkrétní řádek, šel bych rovnou podmínkou ke konkrétnímu ID, bude tak změněn jen jeden záznam. Ale jestli se změna může týkat více řádků, tak je asi dobré změnit všechny řádky, kterých se to týká. A jestliže, se má změnit z více možnosti jen jedna, určitě bych je minimálně seřadil, třeba podle ID. Já používám v tabulkách vždy jako první sloupec s identifikací nastavenou AUTO_INCREMENT. Přijde mi to jako velká pomoc při práci s DB.

Nahoru Odpovědět
2.7.2013 15:24
Čím víc vím, tím víc věcí nevím.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:2.7.2013 17:16

Většinou k dotazům tohoto typu není důvod. Buď ta data chci, anebo nechci, ale neptám se zbytečně, zda tam jsou. Z toho smrdí race condition.

count(*) se používá běžně, ale musí se s ním opatrně.

Nahoru Odpovědět
2.7.2013 17:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:2.7.2013 17:33

Křišťálová koule se mi ozvala: Proč vlastně nepoužiješ Observer?

Nahoru Odpovědět
2.7.2013 17:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.