Autor Zpráva
Itak
Profil *
Ahoj, mohu poprosit o radu. Mám tento dotaz, který použivám pro vytovření grafu... Bohužel tabulka má více než 20t řádků... Dotaz zabere i minutu... Díky za radu k optimalizaci

EXPLAIN SELECT WEEK( `timestamp` , 1 ) AS `Week` , YEAR( `timestamp` ) AS `Year` , COUNT( * ) AS `Registrations` , (

SELECT count( * )
FROM objednavky
WHERE WEEK( `timestamp` , 1 ) = Week
AND YEAR( `timestamp` ) = Year
AND completed =1
)hotovo
FROM objednavky
GROUP BY Year, Week
ORDER BY Year DESC , Week DESC
LIMIT 0 , 30
Kajman
Profil
Trochu rychlejší by mohlo být
SELECT YEARWEEK(timestamp, 1) AS YearWeek,
       COUNT(*) AS Registrations,
       SUM(completed = 1) hotovo
FROM   objednavky
GROUP  BY YearWeek
ORDER  BY YearWeek DESC
LIMIT  0, 30

Urychlily by to předpočítané sloupce s rokem a týdnem, na kterých je už možné vytvořit index. (Dojte tak k redundanci dat, která není obecně doporučována.) Také si rovnou ty součty můžete hodit do pomocné tabulky, která bude aktualizována podle potřeby. Dotazy nad ní už budou taky optimalizovatelné.

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