【发布时间】:2010-04-19 13:50:37
【问题描述】:
我一直在努力解决这个问题很长一段时间,并且带有“慢查询”警告的自动邮件仍然弹出。基本上,我有一个带有相应表的博客以及一个跟踪如何跟踪的表每个博客都被浏览了很多次。最后一张表有大量记录,因为该页面的流量相对较高,并且它将每次点击记录为单独的行。我已经尝试在 WHERE 子句中包含的字段上使用索引,但它似乎没有帮助。我还尝试每周通过删除旧(> 1.weeks)记录来清理表格。所以,我问你们,你们会怎么解决这个问题?
我知道导致运行缓慢的查询是由 Rails 生成的,如下所示:
SELECT count(*) AS count_all
FROM blog_views
WHERE (created_at >= '2010-01-01 00:00:01' AND blog_id = 1);
这些表具有以下结构:
CREATE TABLE IF NOT EXISTS 'blogs' (
'id' int(11) NOT NULL auto_increment,
'name' varchar(255) default NULL,
'perma_name' varchar(255) default NULL,
'author_id' int(11) default NULL,
'created_at' datetime default NULL,
'updated_at' datetime default NULL,`
'blog_picture_id' int(11) default NULL,
'blog_picture2_id' int(11) default NULL,
'page_id' int(11) default NULL,
'blog_picture3_id' int(11) default NULL,
'active' tinyint(1) default '1',
PRIMARY KEY ('id'),
KEY 'index_blogs_on_author_id' ('author_id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
和
CREATE TABLE IF NOT EXISTS 'blog_views' (
'id' int(11) NOT NULL auto_increment,
'blog_id' int(11) default NULL,
'ip' varchar(255) default NULL,
'created_at' datetime default NULL,
'updated_at' datetime default NULL,
PRIMARY KEY ('id'),
KEY 'index_blog_views_on_blog_id' ('blog_id'),
KEY 'created_at' ('created_at')
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
【问题讨论】:
标签: mysql ruby-on-rails performance