Page 1 of 1
mySQL Abfrage optimieren
Posted: 2003-04-13 13:44
by alexander newald
Hallo,
gibt es eine Möglichkeit folgende Abfrage zu optemieren?
Code: Select all
mysql> select CONCAT(YEAR(FROM_UNIXTIME(zeit)),'-',MONTH(FROM_UNIXTIME(zeit))) as datum from troll_traffic GROUP BY datum ORDER BY zeit DESC;
+--------+
| datum |
+--------+
| 2003-4 |
| 2003-3 |
+--------+
2 rows in set (4.90 sec)
Die Spalte
zeit enthält die Unixzeit als Timestamp und ist vom Typ varchar(16), ein Index liegt auf der Spalte. Es sind ca 490.000 Einträge in der Tabelle. Zum Einsatz kommt ein Intel(R) Celeron(R) CPU 1.80GHz mit 512 MB Ram. Query Cache etc sind schon auf hohe Werte eingestellt.
Danke,
Alexander Newald
Re: mySQL Abfrage optimieren
Posted: 2003-04-13 13:56
by jtb
dein Problem ist das Group by..
Ein Group by auf einen ermittelten/erechneten Wert ist immer schlecht..
eventl. würde dir folgendes helfen:
select FROM_UNIXTIME(zeit, '%Y-%c') as datum from troll_traffic GROUP BY datum ORDER BY zeit DESC;
http://www.mysql.com/doc/en/Date_and_ti ... tions.html
Re: mySQL Abfrage optimieren
Posted: 2003-04-13 14:14
by alexander newald
Braucht noch länger....
Code: Select all
select FROM_UNIXTIME(zeit, '%Y-%c') as datum from troll_traffic GROUP BY datum ORDER BY zeit DESC;
+--------+
| datum |
+--------+
| 2003-4 |
| 2003-3 |
+--------+
2 rows in set (8.06 sec)
Gibt es einen anderen Ansatz aus allen timestamp Einträgen die Monate rauszubekommen?
Alexander Newald
Re: mySQL Abfrage optimieren
Posted: 2003-04-13 14:24
by jtb
mach mal deine Spalte zum Typ Timestamp..
eventl. braucht MySQL zum konvertieren so lange..
edit: sorry, merke gerade, dass Timestamp für was anderes ist.. Aber vielleicht wäre ein anderer Datentyp wirklich nützlich..
Re: mySQL Abfrage optimieren
Posted: 2003-04-13 14:50
by jtb
Hi,
wenn du ein int im Gegensatz zu einem String verwenden würdest, könnte es schon etwas bringen!
Jedenfalls ist
Code: Select all
$sql = 'SELECT FROM_UNIXTIME( '875996000' ) ';
langsamer als
Code: Select all
$sql = 'SELECT FROM_UNIXTIME( 875996000 ) ';