einen effektiven Index erstellen habe ich einen Web-Server access_log auf eine MySQL-Tabelle umgewandelt, sieht es wie folgt aus:Wie für folgende Abfrage
CREATE TABLE `access_log` (
`timestamp` int(11) NOT NULL default '0',
`visitorid` int(11) default NULL,
`url` int(11) default NULL,
`params` int(11) default NULL,
`status` smallint(3) NOT NULL default '0',
`bytes` int(20) NOT NULL default '0',
`referrer` int(11) default NULL,
`refparams` int(11) default NULL,
`useragentid` int(11) default NULL,
`keywords` int(11) default NULL,
`country` char(3) default '',
`crawl` int(1) NOT NULL default '0',
`sessionid` int(11) default NULL,
KEY `timestamp` (`timestamp`),
KEY `visitorid` (`visitorid`),
KEY `url` (`url`),
KEY `referrer` (`referrer`),
KEY `keywords` (`keywords`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PACK_KEYS=1;
Ich habe eine Abfrage, die für eine „Most Popular Pages“ Bericht erzeugt einen bestimmten Datumsbereich, sieht ein Beispiel wie folgt aus:
select url,
count(distinct visitorid) as visitors,
count(*) as hits
from access_log where
timestamp >=1270072800 and timestamp <=1272664799
and crawl=0
group by url order by visitors desc limit 100;
diese Abfrage wird ziemlich langsam, wenn es eine Menge von Datensätzen in der Tabelle sind.
Abhängig vom Zeitstempelbereich in Bezug auf die Gesamtzahl der Datensätze in der Tabelle, sagt der Optimierer, dass er entweder den 'Zeitstempel' oder den 'URL' Schlüssel verwenden wird. Aber, es erwähnt immer 'Verwenden wo; Verwenden von temporär; Verwenden von filesort '
Gibt es eine Möglichkeit, ich könnte einen kombinierten Index erstellen, die die Ausführungszeit dieser Abfrage verbessern würde?
Ich habe die folgenden Kombinationen ausprobiert, aber der Optimierer scheint sie zu ignorieren:
- idx (Zeitstempel, url, visitorid, kriechen)
- idx (url, visitorid, krabbeln, Zeitstempel)
Alle Vorschläge oder Hinweise, was ich vermisse, würde geschätzt werden.
Danke!
Wie wäre es mit einem einfachen Index für Zeitstempel? –
Die Tabelle hat bereits einen einfachen Index für den Zeitstempel, ich versuche etwas zu finden, das mir mehr Geschwindigkeit gibt, danke – Michael
Warum versuchen Sie, einen einzigen kombinierten Index zu erstellen? – Donnie