Here`s my SHOW CREATE TABLE tbl:
CREATE TABLE IF NOT EXISTS `msc_pagestats` (
`id` int(10) unsigned NOT NULL auto_increment,
`domain` varchar(250) NOT NULL,
`file` varchar(200) NOT NULL,
`simbol` varchar(100) NOT NULL,
`request_time` timestamp NULL default CURRENT_TIMESTAMP,
`querystring` mediumtext NOT NULL,
`host` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
KEY `myindex` (`simbol`,`request_time`,`file`,`domain`)
) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=248008 ;
So basically this table keeps track on what simbols have been most accesed, most viewed, most searched within the site based on a query string.
My query is:
SELECT `simbol`, count(*) AS requests
FROM msc_pagestats
WHERE 1=1 AND request_time > '20100504000000'
AND simbol NOT LIKE ''
GROUP BY `simbol`
ORDER BY requests DESC
LIMIT 0, 15;
This query EXPLAINED:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE msc_pagestats index NULL myindex 561 NULL 24961 Using where; Using index; Using temporary; Using filesort
So the query tryes to get the most accesed symbols in the latest hour or today.
Here's what I've tried doing in order to get rid of using temporary and using filesort:
COUNT(id) AS requests
instead of the COUNT(*) AS requests;
where 1=1
and simbol not like=''
, it dosen`t prove a big difference though; I'm not that good on optimization, so I`ve runed out of options.
Here's a dump of my 'mysq_slow_query' file:
Query_time: 3 Lock_time: 0 Rows_sent: 15 Rows_examined: 220297
use kmarket;
SELECT `simbol`, count(*) AS requests
FROM msc_pagestats
WHERE 1=1 AND request_time > '20100504000000'
AND simbol NOT LIKE ''
GROUP BY `simbol`
ORDER BY requests DESC
LIMIT 0, 15;
Any help would be appreciated, thanks :)
Not much point in adding an index to a field calculated at run time, it would still need to be sorted/indexed on each run.
An index on (request_time,simbol) may allow the optimiser to exclude a lot of rows more quickly and also reduce the key length.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.