Autor Zpráva
jan99
Profil *
Ahoj, potreboval bych co nejvice zrychlit sql dotazy typu ve velkych tabulkach:
SELECT sloupec WHERE ..(unikatni_cislo).. LIMIT 1
a nebo 
INSERT sloupec WHERE ..(unikatni_cislo).. LIMIT 1

* Ktery z techto dotazu je z hlediska rychlosti vyberu dat lepsi?
1) SELECT sloupec WHERE id BETWEEN 1 AND 3
2) SELECT sloupec WHERE id = 2 LIMIT 1

* Pokud mam primarni klic ktery je napr. od 1 do 100 a chci vybrat cislo 50, preskakuje mysql automaticky radky od 1 do 49?? Nebo prohledava radek po radku od 1 az narazi na 50 tak zkonci?

Diky moc
ahoj
Profil *
Nebylo by jednodušší si to vyzkoušet?
Co očekáváš od SELECT sloupec WHERE?
_es
Profil
jan99:
WHERE ..(unikatni_cislo)
No tak keď to je „unikátne číslo“, tak predsa pôjde o jednu či nula hodnôt a teda netreba zadávať obmedzenie počtu.
ahoj
Profil *
Aha, naběhl jsem si. Moje otázka se týkala samozřejmě INSERT sloupec WHERE
Someone
Profil
ahoj:
A co čekáš od tohodle?[#4]
Tori
Profil
jan99:
Na sloupec s hodnotou, podle které se vyhledává, dejte index (obyčejný nebo unikátní, podle potřeby). MySQL v tom případě bude prohledávat jen index. Spusťte si ten dotaz jako EXPLAIN SELECT ... bez indexu a pak s indexem, uvidíte rozdíl v počtu prohledávaných řádků. Ad rozdíl v rychlosti: Nezkoušel jste vygenerovat si milion řádků náhodných dat a pak párkrát zkusit provést oba dotazy a porovnat průměr časů? Na konkrétní SQL dotaz byste asi dostal konkrétnější odpovědi.
ahoj
Profil *
Someone:
Nic. Mám za to, že je to nesmysl.
Someone
Profil
ahoj:
Nejdříve bych řešil jak správně sestavit dotaz a až pak jak je zrychlit.
ahoj
Profil *
Someone:
Nejdříve bych řešil jak správně sestavit dotaz a až pak jak je zrychlit.

To zní v daném kontextu dost divně.
V [#1] jsou 4 kousky SQL a dotaz je, co je rychlejší / lepší.

SELECT sloupec WHERE ..(unikatni_cislo).. LIMIT 1 // jestliže "(unikatni_cislo)" je např. ID=2, tak ok, LIMIT je nadbytečný
INSERT sloupec WHERE ..(unikatni_cislo).. LIMIT 1 // nesmysl
SELECT sloupec WHERE id BETWEEN 1 AND 3 // funkční, ale vrátí to něco jiného, než jan99 očekává. A jestli má jít o zápis alternativní k ID=2, tak ve srovnání s ním bude pravděpodobně pomalejší
SELECT sloupec WHERE id = 2 LIMIT 1 // totéž co 1

Tečka.
Someone
Profil
ahoj:
Pravda, sám jsem zmatený, nevšiml jsem si, že zakladatelem tématu, je někdo úplně jiný...
Kajman
Profil
jan99:
Pokud mam primarni klic ktery je napr. od 1 do 100 a chci vybrat cislo 50, preskakuje mysql automaticky radky od 1 do 49?

v B-stromech se chtěná hodnota hledá jinak.

ahoj:
LIMIT je nadbytečný

V některých starších verzích byl limit 1 doporučován, kdy plán dotazu vyšel o chlup rychleji i při vyhledávání nad PK. Určitě se tím nic nezkazí.

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: