Autor | Zpráva | ||
---|---|---|---|
JaroslavSedl Profil * |
#1 · Zasláno: 4. 4. 2012, 19:48:09
Máme problém s mysql limitem na: www.azlistofbooks.com/social-sciences/sociology/
SELECT title FROM book2subjects t1 JOIN book t2 ON t1.book = t2.id WHERE sub_subject = "620" AND sub_sub_subject = "6350" ORDER BY title LIMIT 0, 20 *MySQL error:* Error writing file "/tmp/MYwqUHfb" (Errcode: 28) Na technické podpoře hostingu mě řekli, že problém je v tom, že tento select vytváří dočasnou tabulku, která je větší než kolik je volného místa na disku, kde je /tmp. Tabulka book ma pres 4GB a doporučují dotaz upravit tak, aby se nemusela tato 4GB tabulka pri kazdem selectu kopirovat na disk. Nevíte, jak tedy udělat script na mySQL, aby se nekopíroval na disk? Moc tomu právě nerozumím. |
||
Kajman Profil |
#2 · Zasláno: 4. 4. 2012, 20:35:25
Možná by pomohly indexy. Jaké jsou struktury tabulek (včetně současných klíčů a indexů)? Jaké jsou další typické dotazy nad těmito tabulkami?
|
||
JaroslavSedl Profil * |
#3 · Zasláno: 5. 4. 2012, 18:56:58
book2subjects:
id int(11) Auto Increment book int(11) sub_subject int(11) sub_sub_subject int(11) PRIMARY id UNIQUE book, sub_subject, sub_sub_subject INDEX sub_subject, sub_sub_subject INDEX sub_sub_subject book id int(11) title text author varchar(255) author_bio text authors varchar(255) title_slug varchar(255) author_slug varchar(255) isbn13 varchar(255) isbn10 varchar(255) physical varchar(255) publisher varchar(255) pubdate varchar(255) edition varchar(255) synopsis text toc text |
||
Kajman Profil |
#4 · Zasláno: 5. 4. 2012, 22:06:48
Nejnáročnější bude asi to řazení. Kolik řádků vyhovuje těm podmínkám? Jaký je
explain select ... Tohle by asi nemělo být rychlejší, ale zkusit to můžete... SELECT title FROM (SELECT book FROM book2subjects WHERE sub_subject = 620 AND sub_sub_subject = 6350) t1 JOIN book t2 ON t1.book = t2.id ORDER BY title LIMIT 0, 20 Také zkuste zjistit kolik místa má hosting v /tmp. Možná bude nejjednodušší požádat je o rozšíření případně změnit hosting. |
||
Časová prodleva: 11 dní
|
|||
JaroslavSedl Profil * |
#5 · Zasláno: 16. 4. 2012, 18:14:50
Po delším čase jsme se ke scriptu dostal (byl jsem nemocný). Dotaz mySQL jsem tam vložil, ale bohužel vůbec nic to nevypsalo. Asi nějaká zdrada v dotazu mySQL, ale nevím.
|
||
Kajman Profil |
#6 · Zasláno: 17. 4. 2012, 09:19:11
JaroslavSedl:
„Dotaz mySQL jsem tam vložil, ale bohužel vůbec nic to nevypsalo.“ Stále stejné otázky! Kolik řádků vyhovuje těm podmínkám? Jaký je explain (padajícho dotazu)? |
||
JaroslavSedl Profil * |
#7 · Zasláno: 17. 4. 2012, 13:05:33
Explain na můj první sql je:
[0] => Array ( [0] => 1 [1] => PRIMARY [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9] => Impossible WHERE noticed after reading const tables ) [1] => Array ( [0] => 2 [1] => DERIVED [2] => book2subjects [3] => ref [4] => sub_subject,sub_sub_subject [5] => sub_subject [6] => 8 [7] => [8] => 1 [9] => ) Na ten druhý (tvůj): [0] => Array ( [0] => 1 [1] => SIMPLE [2] => t2 [3] => ALL [4] => [5] => [6] => [7] => [8] => 12772250 [9] => Using filesort ) [1] => Array ( [0] => 1 [1] => SIMPLE [2] => t1 [3] => eq_ref [4] => book,sub_subject,sub_sub_subject [5] => book [6] => 12 [7] => azlistofbook.t2.id,const,const [8] => 1 [9] => Using index ) |
||
Kajman Profil |
#8 · Zasláno: 17. 4. 2012, 13:27:28
Tak na potřetí... Kolik řádků vyhovuje těm podmínkám?
V tabulce book2subjects je tedy jediný řádek vyhoující daným podmínkám? A dané book z odpovídajícho řádku neexistuje ve sloupci id v tabulce book? |
||
JaroslavSedl Profil * |
#9 · Zasláno: 17. 4. 2012, 13:57:09
Bohužel počet řádků nezjistím, protože když dám SELECT count(nazev), tak to vždy udělá problém s tím /tmp :(
Ostatně počet řádků by tam měl být vyšší ... počítám 100, 200 i 1400 řádků. |
||
Kajman Profil |
#10 · Zasláno: 17. 4. 2012, 14:31:32
JaroslavSedl:
„Bohužel počet řádků nezjistím“ Kolika řádkům odpovídá tento dotaz? SELECT book FROM book2subjects WHERE sub_subject = 620 AND sub_sub_subject = 6350 |
||
JaroslavSedl Profil * |
#11 · Zasláno: 17. 4. 2012, 15:22:54
0
|
||
Kajman Profil |
#12 · Zasláno: 17. 4. 2012, 15:31:56
Tak se nedivte, že dotaz z [#4] nic nevrátí. Jen je divné, že padne na hubu ten první. To bude asi chyba mysql serveru nebo jeho nastavení. Zkuste si ten samý dotaz nad stejnými daty i na poslední stabilní verzi mysql serveru.
|
||
Časová prodleva: 12 let
|
0