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 Operator
FROM `udrzba_data`
Group by Operator

SELECT Meno
FROM `udrzba_data`
Group by Meno
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

1SELECT Operator, Meno
2FROM `udrzba_data`
3 
4Group by Operator
SELECT Operator, Meno
FROM `udrzba_data`
 
Group by Operator

1SELECT Operator, Meno
2FROM `udrzba_data`
3 
4Group by Meno
SELECT Operator, Meno
FROM `udrzba_data`
 
Group by Meno

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

Pokial pouzijem
1SELECT Operator, Meno
2FROM `udrzba_data`
3 
4Group by Operator, Meno
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)
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:

1SELECT Operator, Meno
2FROM `udrzba_data`
3 
4Group by Operator, Meno
SELECT Operator, Meno
FROM `udrzba_data`
 
Group by Operator, Meno

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

1SELECT Operator, Meno
2FROM `udrzba_data`
3 
4Group by Meno, Operator
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
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.

Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:


Běda vám, jestli to bude blábol.

0