最近,在缓存到memcache之前,我的查询一直在处理中!在这个例子中,花了10秒。我所要做的就是在这种情况下获得10个最近的点击。MySQL性能
我感觉到它加载了所有125,592行然后只返回10,对不对?
# [email protected]: 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;
这里是另外一个慢查询:
# Time: 090214 5:00:40 # [email protected]: 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 NOT NULL, `user_agent` tinytext NOT NULL, `created_at` timestamp NOT NULL default CURRENT_TIMESTAMP, `ip_address` varchar(15) NOT NULL, `campaign_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `campaign_id` (`campaign_id`), KEY `ip_address` (`ip_address`) );
你对这些查询运行解释吗? – jmucchiello 2009-02-14 05:39:34
我刚刚发布相同的问题... 请运行EXPLAIN SELECT * FROM命中WHERE campaign_id = 30 ORDER BY id DESC LIMIT 10; – regex 2009-02-14 05:57:04
我建议你避免使用phpMyAdmin;这不是一个有用的工具。它的行为太不可预知,并且它在命令行客户端中存在很多错误。 – MarkR 2009-02-14 23:25:06