Mysql 我应该插入和删除记录还是插入和更新相似/不同按钮的记录?哪一个更具成本效益?

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

在一个需要实现相似/不同功能的项目中,我想知道从性能的角度来看,哪种方法比其他方法更好。如果我必须使用insert delete,那么如果有人多次喜欢/不喜欢它,会发生什么情况(那么可能大多数主键号码都会基于喜欢/不喜欢而被占用)?
有人知道社交网站是怎么做到的吗

编辑:
我的表格如下:

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
    和一个
    unlikes
    字段,都以0开头
在相似/不相似do上(假设1=相似,0=不相似)

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]