[quote=Oesi50,08.06.2004, 14:54]hallo ptk,
hast Du es schon mal mit einem Index für das Datumsfeld versucht?
[/quote]Ja. describe tabellenname sagt:
+--------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------------------+----------------+
| accessdate | datetime | | MUL | 0000-00-00 00:00:00 | |
QuoteEine andere Variante wäre, per Cron-Job(nachts) die Tabelle nach dem Datumsfeld zu sortieren.
Ja, die Anwendung wird nachts angeschmissen, aber ich habe auch Anwendungen mit einer aehnlichen Problematik, die interaktiv laufen sollten.
Quote> mysql> select accesslog_id from accesslog where accessdate >= "2004-01-01 00:00:00" limit 0,1;
> 1 row in set (0.06 sec)
Wie lange dauert es denn, wenn Du nach einem Datum suchst, was ganz am Ende der Tabelle steht?
Wie man erwarten wuerde: je naeher am Ende, desto akzeptabler die Antwortzeiten:
mysql> select min(accesslog_id) from accesslog where accessdate >= "2004-06-01 00:00:00";
+-------------------+
| min(accesslog_id) |
+-------------------+
| 12700047 |
+-------------------+
1 row in set (14.72 sec)
mysql> select min(accesslog_id) from accesslog where accessdate >= "2004-06-07 00:00:00";
+-------------------+
| min(accesslog_id) |
+-------------------+
| 13419582 |
+-------------------+
1 row in set (1.41 sec)
Quote@Thorium
da bietet sich der Unix-Timestamp als Integer an.
Eventuell auch mit Cron als Extraspalte.
Oder man verwendet TIMESTAMP als Datentyp, der wird intern als UNSIGNED INT gespeichert.(spart auch noch 4 * 13*10**6 Byte)
Wenn ich die Dokumentation richtig verstehe, wird TIMESTAMP automatisch auf die Zeit der letzten Aenderung gesetzt? Dann kann ich TIMESTAMP nicht verwenden.
Das Problem wird auch nicht die evtl. groessere Datenstruktur sein, sondern die grosse Anzahl zu sortierender Daten, im schlimmsten Fall eben knapp 13*10**6 (und es werden taeglich mehr!). Ironischerweise kommt man, wenn man eine reine Textdatei per binaerer Suche durchsuchen wuerde, wesentlich schneller an das Ergebnis heran...