Autor Zpráva
Andrej.B
Profil
Zdravim,

mam problem pri zobrazení výsledkov podla GROUP BY
jednoduchy SELECT z tabulky udrzba_data, riadkov cca 500k+

SELECT Operator
FROM `udrzba_data`
Group by Operator

SELECT Meno
FROM `udrzba_data`
Group by Meno

oba samostatne: vysledok 79 rows (0.037 s) - absolutne perfeknte




Kedze potrebujem aj meno a operator, pouzijem

SELECT Operator, Meno
FROM `udrzba_data`

Group by Operator

SELECT Operator, Meno
FROM `udrzba_data`

Group by Meno

79 rows (5.823 s) - uz je problem s 5 sekundami

Pokial pouzijem
SELECT Operator, Meno
FROM `udrzba_data`

Group by Operator, Meno

Tak je to lepsie a dava mi 0.7 sekundy. Moze mi niekto povedat, co je tam zle, alebo preco je ten cas taky zly? Na Operator aj na Meno je dany INDEX

Dakujem
juriad
Profil
Ten druhý dotaz, kde máš dva sloupce a grupuješ jen podle jednoho je nevalidní SQL, které MySQL v některých módech dovolí. Netuším proč je pomalý.

U posledního dotazu, který je již validní, tipuji, že se nepoužíje jeden z indexů. Zkusil bych vytvořit index přes oba sloupce, jestli to pomůže.
create index on `udrzba_data` (Operator, Meno)

Pokud máš dostatečně novou verzi databáze pošli explain analyze - viz dev.mysql.com/blog-archive/mysql-explain-analyze, jinak obyčejný explain, který alespoň poví, který index se použil/nepoužil.
Andrej.B
Profil
juriad:
Ten druhý dotaz, kde máš dva sloupce a grupuješ jen podle jednoho je nevalidní SQL, které MySQL v některých módech dovolí. Netuším proč je pomalý.

Prestanem pouzivat

U posledního dotazu, který je již validní, tipuji, že se nepoužíje jeden z indexů. Zkusil bych vytvořit index přes oba sloupce, jestli to pomůže.

perfekt
cez oba to ide rychlo
Samostatne pomaly

Dakujem moc
Stroganov
Profil *
Andrej.B:

Ešte jeden tip - ak groupujete podľa viacerých stĺpcov, overte si, či vám vychádza lepšie:

SELECT Operator, Meno
FROM `udrzba_data`
 
Group by Operator, Meno

s indexom Operator, Meno, ako to máte teraz alebo:

SELECT Operator, Meno
FROM `udrzba_data`
 
Group by Meno, Operator

s indexom Meno, Operator

V zásade platí, že je lepšie uviesť ako prvý stĺpec, ktorý pri groupovaní vráti menej riadkov.
Andrej.B
Profil
Stroganov:

rozdiel je citit, miesto 0.08s mam okolo 0.5s, ale furt lepsie ako 5 sekund predtym. Dakujem za dalsi tip. Data budu cez milion riadkov, takze potreba bude kazdeho lepsieho Selectu :)
petr d.
Profil *
Andrej.B:
e a grupuješ jen podle jednoho je nevalidní SQL

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