优化前10个视图的mysql查询

时间:2014-06-05 15:40:35

标签: mysql sql

我有一个用于跟踪特定页面视图的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最终会检查表中的每一行。有没有简单的方法来优化查询?我不认为我能够更改数据库中的列,尽管添加索引可能很好。

1 个答案:

答案 0 :(得分:1)

解决方案是在r_clock上创建索引并在查询开头使用%停止。如果您使用"%-none",则无法使用该索引并且无法提供帮助。

如果您可以更改查询(显然是使用它的数据)以在最后使用%(例如"none-%"),这将允许它使用索引并且将加速它了。