环境:Rails的2.3.11,MySQL 5.1中(InnoDB的)简单的MySQL查询服用时间太长
我的Rails应用程序已经遇到零星用简单的查询服用时间太长,完成和瓶颈整个应用程序的能力问题被更新。这些查询通常与论坛相关,即网站的最高流量部分,以及具有(目前为止)最多更新的论坛。下面是从MySQL慢日志拉到一个示例查询的例子:
# Query_time: 46.900202 Lock_time: 0.000030 Rows_sent: 0 Rows_examined: 0
SET timestamp=1302172666;
UPDATE `forum_topics`
SET `views` = 153, `updated_at` = '2011-04-07 10:36:59'
WHERE `id` = 1213305;
这是一个非常简单查询,应该是非常快的,但是在这种情况下,花了将近47秒的时间完成。该服务器上的平均负载不会超过2,所以这不是问题。其他一些相关的要点是:
- 无论
views
也不updated_at
是 索引。 - 尽管自动增加值可能是 是1.2M,但实际上在此表中只有 70K记录。
- 慢速查询日志中超过90%的查询与此类似。
我在这里找的是关于接下来要解决此问题的步骤的一些建议。
谢谢。
P.S.方案/索引如下:
CREATE TABLE `forum_topics` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`forum_category_id` int(11) DEFAULT NULL,
`title` varchar(255) NOT NULL,
`sticky` tinyint(1) DEFAULT '0',
`views` int(11) DEFAULT '0',
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`last_post_created_at` datetime DEFAULT NULL,
`slug` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_forum_topics_on_created_at` (`created_at`),
KEY `index_forum_topics_on_forum_category_id` (`forum_category_id`),
KEY `index_forum_topics_on_sticky` (`sticky`)
) ENGINE=InnoDB AUTO_INCREMENT=1215414 DEFAULT CHARSET=utf8;
:)'WHERE '身份证'= 1213305;'你的数据库看起来相当巨大的。什么指标? – fl00r 2011-04-07 19:28:26
'id'索引? – 2011-04-07 19:28:30
你的表模式和索引是什么? – IanNorton 2011-04-07 19:28:39