我正在开发一个项目,其中有类似于 StackOverFlow 的向上和向下投票选项。我在数据库设计方面没有太多经验,因此我遇到了以下问题,
首先,这是我的投票表结构:
- voteId-----带有 PRIMARY KEY 的 AUTO_INCRMENT。
- mediaId----用户投赞成/反对票的媒体。
- userId-----投票的用户。
- voteMode---1 表示赞成票,0 表示反对票。这是一个整数字段。
在这种情况下,如果我有 100 个用户和 100 个媒体,那么此表中总共将有 100x100 条记录。
这里出现的问题是数据库正在处理大量记录,而投票按钮现在 react 非常慢。这让我的客户不高兴,我也陷入了麻烦。
有人可以建议我一个更好的模型来避免这张巨大的 table 吗?
我正在使用jQuery.ajax 将我的投票发布到服务器。此外,该项目基于PHP 和 Zend Framework 1.11。所以当我点击UP图标时,需要一些时间才能响应。 Mozilla 曾经在某些时候崩溃过。 我测试了通过循环插入大量垃圾记录(大约 15000 条)。
最佳答案
您可以尝试对表架构进行这些升级:
//All id's are now unsigned , As you do not need any sign
ALTER TABLE `voting`
CHANGE `voteid` `voteid` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
CHANGE `mediaId` `mediaId` INT(11) UNSIGNED NOT NULL,
CHANGE `userId` `userId` INT(11) UNSIGNED NOT NULL,
//ENUM datatype as you need only 2 type of value
CHANGE `voteMode` `voteMode` ENUM('1' , '2') NOT NULL ;
//Adding index , it will surely increase some speed
//Do **not use** index in **columns you do not need**
ALTER TABLE `voting` ADD INDEX ( `mediaId` , `userId` ) ;
浏览Mysql Index了解有关索引的更多信息。
如果您使用MyISAM Storage Engine ,那么我建议你去InnoDB Storage Engine 。 It可以帮助您决定应该使用哪个引擎。
其他一些可能对您有帮助的技巧是:
有关 MySql 数据库优化的一些资源:
关于php - 投票按钮的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12350538/