我没有在“视图”表中存储将各个页面视图存储的站点:
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.您可以提供的任何其他提示或想法将非常感激.