Ich versuche, relativ große Mysql (Myisam) -Tabelle mit 220.000 Zeilen zu optimieren. Die Tabelle selbst ist nicht so groß - etwa 23,5 MB groß. Also, was ist das eigentliche Problem? - Ich habe Abfrage wie folgt:Wie optimiere ich mysql date_format() für Geschwindigkeit in Where-Klausel?
SELECT * FROM table WHERE DATE_FORMAT(date_field, '%m%d') = '1128' LIMIT 10
Ich habe versucht, einen Index für DATE_FIELD zu setzen, sondern zeigen erklären, dass der Index nicht verwendet wurde ... Ich denke, dies ist wegen der DATE_FORMAT nicht so fremd ist(). Also plane ich, eine weitere Spalte hinzuzufügen, die die Daten als '% m% d' enthält, und einen Index darauf zu setzen. Der einzige Grund, warum ich dies nicht tun möchte, ist die Datenduplizierung.
Btw ich DATE_FIELD verwenden ist ein birth Feld und ich bin sicher, ich brauche immer die DATE_FIELD als% Y-% m-% d oder d m%%
Haben Sie besseren Vorschlag haben, wie die Abfrage zu optimieren über ? Danke im Voraus !!!
Einige Informationen:
MySQL Version: 5.0.51b-log
OS: Slackware 12.1
CPU: Pentium III (Coppermine) bei 996.783Mhz
RAM: 512 MB DDR
HDD: 80 GB SATA
PS ich versuchte, eine weitere Spalte hinzuzufügen, die die Daten als% m% d halten. Die Ergebnisse sind sehr gut, aber ich mag diesen Ansatz immer noch nicht. Ich warte auf weitere Vorschläge!
Vielen Dank für die Anregung nos! Ich denke nicht, dass es in meinem Fall sehr nützlich ist (ich habe ein paar Notizen eingefügt), aber im Allgemeinen ist das eine gute Richtung !!! – plamen
Es ist auch gut für die Zukunft. Wenn Sie alle Donnerstage filtern möchten, fügen Sie einfach eine weitere Spalte zu time_dimension hinzu und verwenden Sie t.dayname = 'Thursday'. Oder alle Wochenenden in einem Monat werden, wo t.year = 2009 und t.month = 9 und t.weekend_flag = 1 :-) – nos
, die nicht wirklich hilft nicht, wenn sie mit Geburtsdatum zu tun, wenn die Datenbank in Richtung Kleinkinder ausgerichtet ist. – jmucchiello