Ich brauche ein paar Optionen.
Ich habe eine Tabelle, die wie folgt aufgebaut ist, mit etwa 78.000.000 Zeilen...
- id INT (Primärschlüssel)
- loc VARCHAR (indiziert)
- date VARCHAR (indiziert)
- Zeit VARCHAR
- ip VARCHAR
- lookup VARCHAR
Hier ist ein Beispiel für eine Abfrage, die ich habe.
SELECT lookup, date, time, count(lookup) as count FROM dnstable
WHERE STR_TO_DATE(`date`, '%d-%b-%Y') >= '$date1' AND STR_TO_DATE(`date`, '%d-%b-%Y') <= '$date2' AND
time >= '$hour1%' AND time <= '$hour2%' AND
`loc` LIKE '%$prov%' AND
lookup REGEXP 'ca|com|org|net' AND
lookup NOT LIKE '%.arpa' AND
lookup NOT LIKE '%domain.ca' AND
ip NOT LIKE '192.168.2.1' AND
ip NOT LIKE '192.168.2.2' AND
ip NOT LIKE '192.168.2.3'
GROUP BY lookup
ORDER BY count DESC
LIMIT 100
Ich habe meinen Mysql-Server so konfiguriert, wie ich es in einigen Beispielen mit hoher Auslastung gefunden habe. Die Hardware ist gut, 4 Kerne, 8 Gigabyte RAM.
Diese Abfrage dauert etwa 180 Sekunden... Hat jemand Tipps, wie man dies effizienter gestalten kann?