【发布时间】:2009-02-14 05:10:21
【问题描述】:
最近我在缓存到内存缓存之前的查询一直在处理!在此示例中,它需要 10 秒。在这种情况下,我要做的就是获得 10 个最近的热门歌曲。
我感觉它加载了所有 125,592 行然后只返回 10,对吗?
#User@Host:root[root]@localhost[] # Query_time: 10 Lock_time: 0 Rows_sent: 10 Rows_examined: 125592 SELECT * FROM hits WHERE campaign_id = 30 ORDER BY id DESC LIMIT 10;
这是另一个慢查询:
# 时间:090214 5:00:40 # 用户@主机:root[root]@localhost[] # Query_time: 3 Lock_time: 0 Rows_sent: 1 Rows_examined: 128879 SELECT count(DISTINCT(ip_address)) AS count_distinct_ip_address FROM `hits` WHERE (campaign_id = 30);运行查询 phpMyAdmin 时,需要 1.3395 秒。虽然只是做一个SELECT * FROM hits 只需要 0.0001 秒。
我觉得很奇怪,返回所有匹配项所需的时间比对它们进行排序要少,或者仅仅是我正在对它们进行排序?
对于那些想看我的桌子的人:
CREATE TABLE `hits` ( `id` int(11) unsigned NOT NULL auto_increment, `hostname` varchar(255) NOT NULL, `url` tinytext 不为空, `user_agent` tinytext NOT NULL, `created_at` 时间戳 NOT NULL 默认 CURRENT_TIMESTAMP, `ip_address` varchar(15) NOT NULL, `campaign_id` int(11) NOT NULL, 主键(`id`), KEY `campaign_id`(`campaign_id`), KEY `ip_address` (`ip_address`) );
【问题讨论】:
-
您是否对这些查询进行了解释?
-
我正要发布同样的问题...请发布运行 EXPLAIN SELECT * FROM hits WHERE campaign_id = 30 ORDER BY id DESC LIMIT 10 时返回的详细信息;
-
我建议你避免使用 phpMyAdmin 做任何事情;这不是一个有用的工具。它的行为太不可预测了,并且有很多命令行客户端中不存在的错误。
标签: mysql ruby-on-rails caching memcached