php - 在 MySQL 中存储 View /统计信息的最佳方式

标签 php mysql views archive statistics

我工作的网站没有在“ View ”表中存储个人页面 View :

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 格式)以及 View 发生时的 unix 时间戳。

当然,该表变得相当大(目前有 400 万行,而且它是一个相当年轻的站点)并且在其上运行查询很慢。

为了进行一些基本的优化,我现在创建了一个“views_archive”表:

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

这会忽略用户信息(和推荐 url)并存储每天查看 url 的次数。这可能是我们通常想要使用数据的方式(每天查看一个页面的次数)所以应该使查询非常快,但即使我主要用它来替换“ View ”表(对现在我想我可以按小时显示上周/一个月左右的页面浏览量,然后显示超过该时间的每日浏览量,因此只需要“ View ”表包含上周/一个月的数据)但它仍然很大表。

无论如何,长话短说,我想知道您是否可以给我任何关于如何最好地处理 MySQL 站点中的统计数据/页面 View 存储的提示,目标是保持表的大小) 在数据库中尽可能小,并且仍然能够轻松(并且至少相对快速)查询信息。我稍微查看了分区表,但该站点没有安装 MySQL 5.1。如果您能提供任何其他提示或想法,我们将不胜感激。

最佳答案

您可能希望为页面创建一个表,并让用户 View 引用该表。另一种可能的优化是将用户 IP 存储在不同的表中,也许是一些 session 表信息。那应该会减少您的查询时间。您在归档表方面走在正确的轨道上;同样的优化也应该对此有所帮助。

关于php - 在 MySQL 中存储 View /统计信息的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4187436/

相关文章:

php - oAuth 2.0 用户与客户端?

php - MySQL 插入或选择

mysql - 如何在一个查询中合并不同的多个选择?

php - MySQL 中本地主机和生产环境中的字符串不同

Java连接池(JNDI)半天后不起作用

View 和 $this 中的 Cakephp 助手

php - 如何用 PHP 用大写字母分解字符串?

php - 如何禁用 guzzle ssl 验证 laravel

drupal - 按年份对字段进行分组查看 Drupal 7

php - CouchDB View 可访问,但不会运行查询