Wir haben eine Tabelle in mysql, um alle Besucher unserer Website zu protokollieren. Die Struktur ist unten dargestellt
CREATE TABLE \`tblvisitors\` ( \`visitorURL\` longtext, \`visitorDatetime\` datetime DEFAULT NULL, \`visitorIP\` varchar(255) DEFAULT NULL, \`visitorID\` int(10) NOT NULL AUTO\_INCREMENT, \`visitorUser\` varchar(255) DEFAULT NULL, \`visitorShow\` varchar(50) DEFAULT NULL, \`visitorIPcaption\` varchar(255) DEFAULT NULL, \`visitorIPRange\` varchar(255) DEFAULT NULL, PRIMARY KEY (\`visitorID\`), KEY \`INDEXDT\` (\`visitorDatetime\`), KEY \`INDEXIP\` (\`visitorIP\`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Die Tabelle enthält zur Zeit mehr als 5 Millionen Datensätze.
Wir haben eine INSERT-Operation jede halbe Sekunde und auch eine SELECT-Operation jede halbe Sekunde, die eine CRITERIA auf visitorURL Spalte und Select von COUNT Feld beinhaltet.
Die Anfrage lautet:
SELECT COUNT(visitorURL) FROM tblVisitors WHERE visitorURL='http://mihirdarji.com/something'
Dies treibt die CPU-Auslastung auf einem 8-Core-Server mit 8 GB Ram auf 90 % hoch.
Der MySQL-Administrator zeigt viele Verbindungen mit der obigen Abfrage an, die darauf warten, ausgeführt zu werden.
Für Vorschläge wäre ich dankbar.
Plan erläutern sagt
| id | select\_type | table | type | possible\_keys | key | key\_len | ref | rows | Extra |
| 1 | SIMPLE | tblVIsitors | ALL | NULL | NULL | NULL | NULL | 4293277 | Using where |