Re: Langsame Query
- From: Axel Schwenke <axel.schwenke@xxxxxx>
- Date: Tue, 22 Jan 2008 00:56:50 +0100
Klaus Herzberg wrote:
Axel Schwenke wrote:
Klaus Herzberg wrote:
Hallo,
ich habe eine Tabelle "global_accesslog" zum Loggen von Zugriffen:
id int(11) auto_increment
time int(11)
useragent varchar(255)
referer varchar(255)
address varchar(255)
host varchar(255)
uri varchar(255)
querystring varchar(255)
LOL. Fehlt nur noch, daß das alles utf8 ist.
Nein, ist es nicht, aber erklaere doch mal, warum LOL?
Obiges offenbart ein typisches Denkmuster: "Ich habe keine Ahnung wie groß
meine Felder sind. Ich will auch gar nicht darüber nachdenken. Also nehme
ich einfach die längsten VARCHAR()s die ich bekommen kann."
Mittlerweile hat die Tabelle ca. 1.5 Mio Eintraege und ist ca. 400 MB...
gross (laut phpMyAdmin).
Einen Indes verwende ich fuer die Tabelle nicht.
LOL^2
Keyname Type Cardinality Field
PRIMARY PRIMARY 1462068 id
time INDEX 1462068 time
Was bringt hier der Index? Oder habe ich das Prinzip der Indizes falsch
verstanden? Aber ansonsten, bitte erklaere mir das LOL^2.
Ohne passenden Index macht deine Abfrage einen Tablescan, liest also die
ganzen 400MB jedes Mal (modulo Caches) von vorn bis hinten. Kein Wunder, daß
das langsam ist.
Kardinalität ist irrelevant. In einem Telefonbuch sind (Name, Vorname,
Adresse) und (Telefonnummer) auch jeweils unique. Trotzdem nutzt dir ein
alphabetisch sortiertes Telefonbuch nichts, um Teilnehmer zu finden, deren
Telefonnummer größer als 47110815 ist.
Schreib deine Logs in Files, wie alle vernünftigen Menschen. Nur
Verkäufer
von Hardware kommen auf die Idee, eine SQL-Datenbank als Backend zur
Speicherung von HTTP Zugriffslogs zu verwenden.
Ja, dies mag auf den ersten Blick so erscheinen. Allerdings gibt es noch
2 weitere Tabellen, wo die Zugriffe auf einzelne Firmendaten geloggt
werden. Darueber werden dann ein paar wenige Statistiken erstellt. Es
erschien mir einfacher dies einheitlich ueber gemeinsame Scripte zu
realisieren, als die globalen Logs in Files und andere Logs in die DB zu
schreiben.
Dann schreib doch einfach alles in *ein* Logfile. Und laß meinetwegen einmal
am Tag ein Skript drüber laufen und schreib die Ergebnisse in die
Datenbank. Aber für Rohdaten ist die Datenbank zu schade. Es sei denn, du
hast Hardware übrig, die du unbedingt beschäftigen willst.
Denn: Es handelt sich um momentan 23.000 Firmen. Da haette
ich die Moeglichkeit, alles in ein File zu schreiben bzw. fuer jede
Firma ein File zu erzeugen.
Normalisierung hast du also auch nicht verstanden.
<seufz>
XL
--
In der klassischen Kryptographie verschlüsselt Alice Nachrichten an Bob um
sie vor Carol zu schützen. Bei DRM sind Bob und Carol die gleiche Person.
.
- Follow-Ups:
- Re: Langsame Query
- From: Klaus Herzberg
- Re: Langsame Query
- References:
- Langsame Query
- From: Klaus Herzberg
- Re: Langsame Query
- From: Axel Schwenke
- Re: Langsame Query
- From: Klaus Herzberg
- Langsame Query
- Prev by Date: Re: Langsame Query
- Next by Date: Re: Langsame Query
- Previous by thread: Re: Langsame Query
- Next by thread: Re: Langsame Query
- Index(es):
Relevant Pages
|