我有一个用于跟踪特定页面视图的mysql表:
CREATE TABLE `views` (
`time` datetime NOT NULL,
`remote_host` varchar(255) default '',
`r_clock` varchar(255) default '',
`r_timezone` varchar(255) default '',
`referer` varchar(255) default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8
我为获得前10名而撰写的查询是:
select count(*) as count, r_clock
from views where r_clock <> "html5" and r_clock not like "%-none"
group by r_clock
limit 10;
然而,这个查询似乎非常慢,因为我们获得了很多视图,并且使用此查询,mysql最终会检查表中的每一行。有没有简单的方法来优化查询?我不认为我能够更改数据库中的列,尽管添加索引可能很好。
答案 0 :(得分:1)
解决方案是在r_clock上创建索引并在查询开头使用%
停止。如果您使用"%-none"
,则无法使用该索引并且无法提供帮助。
如果您可以更改查询(显然是使用它的数据)以在最后使用%
(例如"none-%"
),这将允许它使用索引并且将加速它了。