当前位置:  开发笔记 > 编程语言 > 正文

用于评级系统的高效MySQL表结构

如何解决《用于评级系统的高效MySQL表结构》经验,为你挑选了1个好方法。

这篇文章是这个回答问题的后续内容:存储用户ID列表的最佳方法.

我采用了cletus和Mehrdad Afshari关于使用规范化数据库方法的史诗建议.是否正确设置了以下表格以进行适当的优化?我对MySQL效率有点新意,所以我想确保它有效.

另外,在找到游戏的平均评分和总票数时,我应该分别使用以下两个查询?

SELECT avg(vote) FROM votes WHERE uid = $uid AND gid = $gid;    
SELECT count(uid) FROM votes WHERE uid = $uid AND gid = $gid;

CREATE TABLE IF NOT EXISTS `games` (
  `id` int(8) NOT NULL auto_increment,
  `title` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(8) NOT NULL auto_increment,
  `username` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`)
) AUTO_INCREMENT=1 ;


CREATE TABLE IF NOT EXISTS `votes` (
  `uid` int(8) NOT NULL,
  `gid` int(8) NOT NULL,
  `vote` int(1) NOT NULL,
  KEY `uid` (`uid`,`gid`)
) ;

Uwe Mesecke.. 6

一场比赛的平均投票: SELECT avg(vote) FROM votes WHERE gid = $gid;

游戏票数: SELECT count(uid) FROM votes WHERE gid = $gid;

因为你没有任何用户或游戏ID较小,所以0你可以使它们无符号整数(int(8) unsigned NOT NULL).

如果您想强制用户只能对游戏进行一次投票,那么在表格中创建一个主键,uid而不是仅仅使用普通索引.gidvotes

CREATE TABLE IF NOT EXISTS `votes` (
  `uid` int(8) unsigned NOT NULL,
  `gid` int(8) unsigned NOT NULL,
  `vote` int(1) NOT NULL,
  PRIMARY KEY (`gid`, `uid`)
) ;

主键的字段(首先是gid,然后uid)的顺序很重要,因此索引首先排序gid.这使得索引对于具有给定的选择特别有用gid.如果要选择给定用户所做的所有投票,则使用just添加另一个索引uid.

我建议InnoDB用于存储引擎,因为特别是在高负载设置中,表锁会破坏您的性能.对于读取性能,您可以使用APC,Memcached或其他方法实现缓存系统.



1> Uwe Mesecke..:

一场比赛的平均投票: SELECT avg(vote) FROM votes WHERE gid = $gid;

游戏票数: SELECT count(uid) FROM votes WHERE gid = $gid;

因为你没有任何用户或游戏ID较小,所以0你可以使它们无符号整数(int(8) unsigned NOT NULL).

如果您想强制用户只能对游戏进行一次投票,那么在表格中创建一个主键,uid而不是仅仅使用普通索引.gidvotes

CREATE TABLE IF NOT EXISTS `votes` (
  `uid` int(8) unsigned NOT NULL,
  `gid` int(8) unsigned NOT NULL,
  `vote` int(1) NOT NULL,
  PRIMARY KEY (`gid`, `uid`)
) ;

主键的字段(首先是gid,然后uid)的顺序很重要,因此索引首先排序gid.这使得索引对于具有给定的选择特别有用gid.如果要选择给定用户所做的所有投票,则使用just添加另一个索引uid.

我建议InnoDB用于存储引擎,因为特别是在高负载设置中,表锁会破坏您的性能.对于读取性能,您可以使用APC,Memcached或其他方法实现缓存系统.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有