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存储在不同的表中,可能是某些会话表信息.这应该会减少您的查询时间.你在归档表的正确轨道上;相同的优化也应该有所帮助.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...