Autor | Zpráva | ||
---|---|---|---|
jan99 Profil * |
#1 · Zasláno: 30. 3. 2012, 20:32:21
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 * |
#2 · Zasláno: 30. 3. 2012, 20:37:15
Nebylo by jednodušší si to vyzkoušet?
Co očekáváš od SELECT sloupec WHERE ?
|
||
_es Profil |
#3 · Zasláno: 30. 3. 2012, 20:44:02
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 * |
#4 · Zasláno: 30. 3. 2012, 20:47:42
Aha, naběhl jsem si. Moje otázka se týkala samozřejmě
INSERT sloupec WHERE
|
||
Someone Profil |
#5 · Zasláno: 30. 3. 2012, 20:49:31
ahoj:
A co čekáš od tohodle?[#4] |
||
Tori Profil |
#6 · Zasláno: 30. 3. 2012, 21:06:44
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 * |
#7 · Zasláno: 30. 3. 2012, 23:27:00
Someone:
Nic. Mám za to, že je to nesmysl. |
||
Someone Profil |
#8 · Zasláno: 30. 3. 2012, 23:28:18
ahoj:
Nejdříve bych řešil jak správně sestavit dotaz a až pak jak je zrychlit. |
||
ahoj Profil * |
#9 · Zasláno: 30. 3. 2012, 23:36:47
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 |
#10 · Zasláno: 30. 3. 2012, 23:46:31
ahoj:
Pravda, sám jsem zmatený, nevšiml jsem si, že zakladatelem tématu, je někdo úplně jiný... |
||
Kajman Profil |
#11 · Zasláno: 1. 4. 2012, 20:23:24
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í. |
||
Časová prodleva: 12 let
|
0