Autor | Zpráva | ||
---|---|---|---|
Kcko Profil |
#1 · Zasláno: 7. 6. 2008, 11:23:08 · Upravil/a: Kcko
Potrebuji vybrat celkovy pocet zapasu za dnesni den =>
SELECT COUNT(1) FROM `vysledky` WHERE DATE(datum) = CURDATE() Dotaz trva nejak dlouho, podivam se na explain ( trval temer 1 vterinu a projel 22 tisic radku - hm v databazi mam 22 tisic zapasu ) Index na sloupci datum samozrejme mam. Pri pouziti se neaplikuje pravdepodobne Zatim jsem vyresil problem takto EXPLAIN SELECT * FROM `vysledky` WHERE datum >=20080606 To uz vyhazuje prochazeni cca 200 zapasu Nevi nekdo proc se index nepouzije, ci zna lepsi reseni? Nekdy se uplne divim co Mysql (ne)umi Taky by mne zajimalo proc u druheho zmineneneho prikladu nemuzu pouzit jen datum = 20080606 Jinak se nenajde zadny zapas , znamenko vetsi je tam holt treba, nechapu Sloupec datum je datoveho typu DATETIME |
||
Kajman_ Profil * |
#2 · Zasláno: 7. 6. 2008, 12:10:37
Index máš na datum ne na date(datum), proto se nemůže použít v první případě. Nevím, jestli už mysql umí dělat indexy na výrazy.. např. DATE(datum), tak bych zkusil
where datum between '2008-06-06' and '2008-06-06 23:59:59' |
||
Kcko Profil |
#3 · Zasláno: 7. 6. 2008, 12:41:02
datum between '2008-06-06' and '2008-06-06 23:59:59'
Jasne to funguje. Diky za vysvetleni s indexem, budu muset pozmenit cast dotazu na webu. Jeste bych potreboval znati odpoved na >> Taky by mne zajimalo proc u druheho zmineneneho prikladu nemuzu pouzit jen datum = 20080606 Dik Petre |
||
Kajman_ Profil * |
#4 · Zasláno: 7. 6. 2008, 14:03:17
Číslo 20080606 se převede automaticky na formát datetime... tedy '2008-06-06 00:00:00' a např. '2008-06-06 00:00:01' tedy už nevyhovuje.
|
||
Kcko Profil |
#5 · Zasláno: 7. 6. 2008, 14:08:14
Aha taky mi to docvaklo po tom nejapnem dotazu.
Thx budu si pamatovat |
||
Časová prodleva: 16 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0