繁体   English   中英

有关关系数据的数据库结构的建议

[英]Suggestion on Database structure for relational data

我已经为这个问题努力了很长时间,并且仍然弹出带有“慢查询”警告的自动邮件。基本上,我的Blog带有一个对应的表以及一个跟踪每个表有多少次的表博客已被查看。 由于该页面的访问量相对较高,所以最后一个表具有大量记录,并且将每个匹配记录为单独的行。 我已尝试使用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 ;

最有可能的是,您在Blog_id和created_at列上需要一个索引

不是两个索引各占一列...

...
KEY 'whizzy' ('blog_id', 'created_at'),
...

CREATE TABLE中,您可以具有复合索引/键:

...
{INDEX|KEY} [index_name] [index_type] (index_col_name,...)
...

如果无效,请尝试将订单撤消

我不会将每个匹配记录为唯一的一行。

如果您只想统计浏览一个博客的次数,为什么不为每个博客创建一行,然后将view_count字段添加到表中。 然后仅此字段将被更新...。

如果需要跟踪用户/ ips,并且想知道每个用户单击博客的次数,则可以在类似于此的结构中创建一个额外的表:

id(pk)

blog_id

user_id / ip_address

日期

hit_counts

通过这样的结构,您可以概览浏览博客的次数,以及查看多少用户以及每个用户单击了多少次...

否则,如果您确实想为每个匹配项创建行,而索引却没有足够快地完成该过程,则可以考虑使用功能更强大的服务器或其他数据库管理系统。

希望这可以帮助!

我的想法与皮耶罗相同,但有所不同。

您可以在名为“命中”的博客表中添加一列,并在发生命中时始终增加此字段的值,并像现在一样在blog_view表中插入新记录。

这样,您就不必运行查询来对点击进行计数,您还可以在需要时查看点击详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM