Thread Effiziente SELECTs in MySQL: Insertion order determinieren? (23 answers)
Opened by ptk at 2004-06-08 16:02

ptk
 2004-06-08 17:34
#32220 #32220
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[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:
Code: (dl )
1
2
3
4
+--------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------+------+-----+---------------------+----------------+
| accessdate | datetime | | MUL | 0000-00-00 00:00:00 | |

Quote
Eine 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:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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...

View full thread Effiziente SELECTs in MySQL: Insertion order determinieren?