mysql 赞按钮 table id auto_increment 优化
mysql like button table id auto_increment optimization
我有这个table:
CREATE TABLE IF NOT EXISTS `likes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user` varchar(40) NOT NULL,
`post_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
是给大店的,让顾客喜欢产品。它记录谁喜欢(用户)和什么(post id)。喜欢脸书。
例如:
1 - 玛丽亚 - 233
2 - 约翰 - 527
...
所以,1个赞,1条记录。
我该如何优化它?允许多条记录?并尽可能快?
我可以使用 KEY 分区吗?有什么例子吗? id int(11) 是不是太小了?
非常感谢!
INT,默认为SIGNED;范围是-20亿到+20亿。它占用4个字节。但是 AUTO_INCREMENTs 永远不会是负数,所以 INT UNSIGNED 会更好——范围从 0 到 + 40 亿(仍然是 4 个字节)。
40 亿是世界人口的一半以上。如果你接近 "likes" 的那个数字,有人在作弊,你应该堵住那个洞。
同上 post_id。和 user_id。 (哎呀,我跑题了。)
user VARCHAR(40) CHARACTER SET latin1 -- 如果你希望接近40亿,你需要让中国人、泰国人、韩国人等进来。使用utf8mb4。
你们要求用户注册吗? (否则你怎么能阻止某人"stuffing the ballot box"?)你有另一个table叫Users
?它有一个AUTO_INCREMENT?那个 id 是一个 4 字节的 INT UNSIGNED?所以,不要在这里使用全名;使用那个ID。更小 --> 更可缓存 --> 更少 I/O --> 更快。
分区?不可以。在没有先了解它能做什么和不能做什么之前不要使用 PARTITIONing。它确实 而不是 本质上提供速度;当然不适合这个用例。
引擎=MyISAM。您是否曾经在拥有十亿行 MyISAM table 的服务器上发生过电源故障?当服务器备份时,它开始抱怨损坏 table。你花了几个小时弄清楚这意味着什么。然后你开始修复TABLE。几小时后结束。同时系统不可用。使用 ENGINE=InnoDB.
我有这个table:
CREATE TABLE IF NOT EXISTS `likes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user` varchar(40) NOT NULL,
`post_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
是给大店的,让顾客喜欢产品。它记录谁喜欢(用户)和什么(post id)。喜欢脸书。
例如: 1 - 玛丽亚 - 233 2 - 约翰 - 527 ...
所以,1个赞,1条记录。
我该如何优化它?允许多条记录?并尽可能快?
我可以使用 KEY 分区吗?有什么例子吗? id int(11) 是不是太小了?
非常感谢!
INT,默认为SIGNED;范围是-20亿到+20亿。它占用4个字节。但是 AUTO_INCREMENTs 永远不会是负数,所以 INT UNSIGNED 会更好——范围从 0 到 + 40 亿(仍然是 4 个字节)。
40 亿是世界人口的一半以上。如果你接近 "likes" 的那个数字,有人在作弊,你应该堵住那个洞。
同上 post_id。和 user_id。 (哎呀,我跑题了。)
user VARCHAR(40) CHARACTER SET latin1 -- 如果你希望接近40亿,你需要让中国人、泰国人、韩国人等进来。使用utf8mb4。
你们要求用户注册吗? (否则你怎么能阻止某人"stuffing the ballot box"?)你有另一个table叫Users
?它有一个AUTO_INCREMENT?那个 id 是一个 4 字节的 INT UNSIGNED?所以,不要在这里使用全名;使用那个ID。更小 --> 更可缓存 --> 更少 I/O --> 更快。
分区?不可以。在没有先了解它能做什么和不能做什么之前不要使用 PARTITIONing。它确实 而不是 本质上提供速度;当然不适合这个用例。
引擎=MyISAM。您是否曾经在拥有十亿行 MyISAM table 的服务器上发生过电源故障?当服务器备份时,它开始抱怨损坏 table。你花了几个小时弄清楚这意味着什么。然后你开始修复TABLE。几小时后结束。同时系统不可用。使用 ENGINE=InnoDB.