mysql - 优化 mysql 查询前 10 个 View

标签 mysql sql

我有一个 mysql 表,用于跟踪特定页面的 View :

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;
然而,这个查询似乎非常慢,因为我们获得了很多 View ,并且通过这个查询,mysql 最终检查表中的每一行。有没有什么简单的方法来优化查询?我认为我无法更改数据库中的列,尽管添加索引可能没问题。

最佳答案

解决方案是在 r_clock 上创建索引并停止在查询开头使用 % 。如果你使用"%-none",你将无法使用索引,也无济于事。

如果您可以更改查询(显然还有与之一起使用的数据)以在末尾添加 % (例如 "none-%"),则此将允许它使用索引并加快速度。

关于mysql - 优化 mysql 查询前 10 个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24064498/

相关文章:

mysql 插入查询数据类型

mysql - 无法在工作台中创建 mysql 表

mysql - Neo4j : Clarification needed about Data Size of Neo4j

java - 在非主键列上使用 Hibernate Criteria 进行内部连接

sql - 如何停止 Sql Server 的用户实例? (Sql Express 用户实例数据库文件被锁定,即使在停止 Sql Express 服务后)

mysql - 如何创建表格并确保整行是唯一的

javascript - AJAX 事件有效,但不会在不刷新的情况下同时反射(reflect) PHP MYSQL 结果。

mysql - 选择没有另一行具有值的行

sql - 过滤掉 SELECT 中重复的后续记录

php - 根据 JOIN Criteria 将一列与其他列进行匹配