Hallo,
ich hoste und programmiere zur Zeit ein IRC-Logger mit den zugehörigen CGI-Skripten, um die Daten online anzuzeigen. Seit ich vor kurzem alte Logs importiert habe, komme ich auf etwa eine Million Zeilen, und damit wird die Datenbank relativ langsam (sprich: es gibt eine spürbare Verzögerung im Seitenaufbau).
Die Tabelle sieht bisher so aus:
mysql\> describe irclog;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto\_increment |
| channel | varchar(30) | YES | | NULL | |
| day | char(10) | YES | | NULL | |
| nick | varchar(40) | YES | | NULL | |
| timestamp | int(11) | YES | | NULL | |
| line | text | YES | | NULL | |
| spam | tinyint(1) | YES | | 0 | |
+-----------+-------------+------+-----+---------+----------------+
7 rows in set (0.14 sec)
channel ist der IRC-Channel (und es wird immer nur einer gleichzeitig dargestellt, d.h. alle Abfragen haben ein ‚WHERE channel = ?‘ drin), day der Tag im Format ‚YYYY-MM-DD‘ (der ebenfalls fast immer abgefragt wird), der Rest dürfte selbsterklärend sein.
Jetzt ist meine Frage: Wie kann ich das effizienter machen?
Ich kenne mich nicht so gut mit Indizes aus: reicht es, einen Index über der Spalte day zu errichten, um die Abragen zu beschleunigen? Oder hilft das nur bei Volltextsuche?
Ansonsten habe ich mir noch folgendes überlegt:
- Ich könnte die Daten für jeden Channel in eine eigene Tabelle packen
- Ich könnte day durch einen Integer ersetzen und in den CGI-Scripten ins Datum umwandeln
Würde das die Abfragen tatsächlich beschleunigen?
Über Kommentare oder Tipps würde ich mich freuen.
Grüße,
Moritz