微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 在MySQL中存储视图/统计信息的最佳方式

我没有在“视图”表中存储将各个页面视图存储的站点
CREATE TABLE `views` (
  `view_id` bigint(16) NOT NULL auto_increment,`user_id` int(10) NOT NULL,`user_ip` varchar(15) NOT NULL,`view_url` varchar(255) NOT NULL,`view_referrer` varchar(255) NOT NULL,`view_date` date NOT NULL,`view_created` int(10) NOT NULL,PRIMARY KEY  (`view_id`),KEY `view_url` (`view_url`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

这是非常基本的,存储user_id(用户在网站上的id),他们的IP地址,url(没有域减少表的大小),引用url(现在没有真正使用它,可能会摆脱它它的日期(当然是YYYY-MM-DD格式),以及视图发生时的unix时间戳.

当然,这个表变得相当大(目前有400万行,而且它是一个相当年轻的站点),并且运行查询的速度很慢.

对于一些基本的优化,我现在创建了一个’views_archive’表:

CREATE TABLE `views_archive` (
  `archive_id` bigint(16) NOT NULL auto_increment,`view_count` smallint(5) NOT NULL,PRIMARY KEY  (`archive_id`),KEY `view_url` (`view_url`),KEY `view_date` (`view_date`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

这会忽略用户信息(和引荐网址)并存储每天查看网址的次数.这可能是我们通常想要使用数据的方式(每天查看一次页面次数)所以应该快速查询,但即使我用它来主要替换’views’表(右)现在我想我可以按小时显示上周/月左右的页面浏览量,然后显示超出该数据的每日视图,因此只需要’views’表来包含上周/月的数据)但它仍然很大表.

无论如何,长话短说,我想知道你是否可以给我任何关于如何最好地处理MysqL站点中的统计/页面视图存储的提示,目标是保持表中的表的大小db尽可能小,并且仍然能够轻松(并且至少相对快速地)查询信息.我看了一下分区表,但该站点没有安装MysqL 5.1.您可以提供的任何其他提示或想法将非常感激.

您可能希望只为页面创建一个表,并让用户视图具有对该表的引用.另一种可能的优化是将用户IP存储在不同的表中,可能是某些会话表信息.这应该会减少您的查询时间.你在归档表的正确轨道上;相同的优化也应该有所帮助.

原文地址:https://www.jb51.cc/php/136421.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐