我有一个只有一列的表:userid。
当用户访问某个页面时,他的用户标识被插入到表中。用户 ID 是唯一的,因此该表中不应有两个相同的用户 ID。
我正在考虑两种设计:
- 使列唯一并在用户每次访问该页面时使用
INSERT
命令。 - 通过从表中
SELECT
ing 检查用户是否已经记录在表中,如果没有找到记录则INSERT
ing。
哪个更快?
最佳答案
一定要创建一个 UNIQUE
索引,或者,更好的是,使该列成为 PRIMARY KEY
。
无论如何,您都需要一个索引来加快检查速度。
为什么不让这个索引UNIQUE
以便您有另一个后备选项(如果您出于某种原因忘记检查SELECT
)?
如果您的表是 InnoDB
,它无论如何都会有一个 PRIMARY KEY
,因为所有 InnoDB
表都是按设计索引组织的。
如果您没有在表中声明PRIMARY KEY
,InnoDB
将创建一个隐藏 列作为主键,从而使您的表两倍大,并且您的列上不会有索引。
在您的列上创建PRIMARY KEY
是双赢的。
你可以发布
INSERT
IGNORE
INTO mytable
VALUES (userid)
并检查有多少条记录受到影响。
如果 0
,则存在 key 冲突,但没有异常(exception)。
关于mysql - 哪个数据库设计更快 : a unique index and INSERT IGNORE, 或使用 SELECT 查找现有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1328074/