MySQL, PostgreSQL, SQLite
-
alexander newald
- Posts: 1117
- Joined: 2002-09-27 00:54
- Location: Hannover
Post
by alexander newald » 2003-04-13 13:44
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
-
jtb
- Posts: 599
- Joined: 2002-08-18 16:41
- Location: Darmstadt
Post
by jtb » 2003-04-13 13:56
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
-
alexander newald
- Posts: 1117
- Joined: 2002-09-27 00:54
- Location: Hannover
Post
by alexander newald » 2003-04-13 14:14
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
-
jtb
- Posts: 599
- Joined: 2002-08-18 16:41
- Location: Darmstadt
Post
by jtb » 2003-04-13 14:24
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..
-
jtb
- Posts: 599
- Joined: 2002-08-18 16:41
- Location: Darmstadt
Post
by jtb » 2003-04-13 14:50
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 ) ';