最近我在缓存到内存缓存之前的查询一直在处理!在此示例中,它需要 10 秒。在这种情况下,我要做的就是获得 10 个最近的热门歌曲。
我感觉它加载了所有 125,592 行然后只返回 10,对吗?
# 用户@主机: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 秒。我觉得很奇怪,返回所有匹配项所需的时间少于对它们进行排序,或者仅仅是我正在对它们进行排序?
对于那些想看我的桌子的人:
创建表`命中`( `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`) );