Autor Zpráva
JaroslavSedl
Profil *
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
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 *
book2subjects:
id                 int(11) Auto Increment     
book               int(11)     
sub_subject        int(11)     
sub_sub_subject    int(11)
Index:
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
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.
JaroslavSedl
Profil *
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
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 *
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
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 *
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
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 *
0
Kajman
Profil
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.

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:

0