Mysql 我应该插入和删除记录还是插入和更新相似/不同按钮的记录?哪一个更具成本效益?
在一个需要实现相似/不同功能的项目中,我想知道从性能的角度来看,哪种方法比其他方法更好。如果我必须使用insert delete,那么如果有人多次喜欢/不喜欢它,会发生什么情况(那么可能大多数主键号码都会基于喜欢/不喜欢而被占用)?Mysql 我应该插入和删除记录还是插入和更新相似/不同按钮的记录?哪一个更具成本效益?,mysql,social-media-like,Mysql,Social Media Like,在一个需要实现相似/不同功能的项目中,我想知道从性能的角度来看,哪种方法比其他方法更好。如果我必须使用insert delete,那么如果有人多次喜欢/不喜欢它,会发生什么情况(那么可能大多数主键号码都会基于喜欢/不喜欢而被占用)? 有人知道社交网站是怎么做到的吗 编辑: 我的表格如下: CREATE TABLE `junc_user_share_like` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `jusid` int(10) un
有人知道社交网站是怎么做到的吗 编辑:
我的表格如下:
CREATE TABLE `junc_user_share_like` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`jusid` int(10) unsigned NOT NULL,
`liker` mediumint(8) unsigned NOT NULL,
`when` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `jusid` (`jusid`,`liker`),
KEY `liker` (`liker`),
CONSTRAINT `junc_user_share_like_ibfk_1` FOREIGN KEY (`liker`) REFERENCES `user` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `junc_user_share_like_ibfk_2` FOREIGN KEY (`jusid`) REFERENCES `junc_user_share` (`jusid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB
编辑2:正如你在上次更新中所说的,这是我推断的:
INSERT INTO likes SET jusid=$jusid, liker=$liker
UPDATE junc_user_share SET likes=likes+1 WHERE id=$id
这对喜欢的人来说非常有效,但是如果有人想要撤销他的喜欢呢?我应该删除喜欢的记录吗?我的问题就在这里?在这里做什么?反规范化
- 有一张有喜欢和不喜欢的表格(谁做了什么到哪个项目)
- 在items表上有一个
和一个likes
字段,都以0开头unlikes
likes\u unlikes(物品、用户)
上的唯一键
作为礼物为您提供了独特性
编辑
经过讨论,如果你只是喜欢,但没有不喜欢,情况就更容易了:
- 只需要一个带有项目和用户id的
表likes
- items表上只需要一个
字段likes
INSERT INTO likes SET item=[id of item], user=[id of user];
UPDATE items SET likes=likes+1 WHERE id=[id of item]
对于类似的反转:
DELETE FROM likes WHERE item=[id of item] AND user=[id of user];
UPDATE items SET likes=likes-1 WHERE id=[id of item]
请提供更多关于这个问题的细节,这样就很容易理解我有一张表,上面有喜欢和不喜欢的人:谁喜欢哪个帖子。所以你有一个部分。实施第二部分,你就没事了!在您的方法中,必须更新两个表。我的是一张桌子。是的,这是真的——每一个喜欢/不喜欢的人都会有一次更新。另一方面,如果显示likes/unlikes,则会丢失
SELECT
上的所有连接,这会带来巨大的加速,因为我很确定,对于每个编写的like/nothing,都会有成百上千次的读取,这是一个很好的交易。我只是显示likes,实际上没有什么不一样的(不像:撤销你的like)。我的方法更像是G+。
DELETE FROM likes WHERE item=[id of item] AND user=[id of user];
UPDATE items SET likes=likes-1 WHERE id=[id of item]