Autor | Zpráva | ||
---|---|---|---|
Itak Profil * |
#1 · Zasláno: 20. 1. 2012, 09:34:01 · Upravil/a: Moderátor (editace znemožněna) 25. 1. 2012, 13:00:12
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 |
||
Časová prodleva: 5 dní
|
|||
Kajman Profil |
#2 · Zasláno: 25. 1. 2012, 12:59:53
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é. |
||
Časová prodleva: 12 let
|
0