gpt4 book ai didi

mysql - MySQL 中的大型唯一键

转载 作者:可可西里 更新时间:2023-11-01 08:35:35 25 4
gpt4 key购买 nike

我正在为我正在创建的网站实现一个非常简单的用户数据库,自然我想确保我的工作尽可能接近“最佳实践”。数据库在 MySQL 中,我正在努力处理表定义。

CREATE TABLE IF NOT EXISTS 'users' (
`user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'auto incrementing user_id of each user, unique index',
`user_email` varchar(254) COLLATE utf8_unicode_ci COMMENT 'user''s email',
`user_password_hash` text COLLATE utf8_unicode_ci NOT NULL COMMENT 'user''s password in salted and hashed format',
PRIMARY KEY (`user_id`),
UNIQUE KEY `user_email` (`user_email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='user data' AUTO_INCREMENT=1 ;

我从 php-login.net 借用了这个表定义,并对其进行了编辑,使 user_email 成为唯一键(原版将其作为文本字段,非唯一)。

读了一些书后,我看到一些评论说拥有这么大(254*3 字节)的唯一键/索引意味着数据库设计不佳,事实上 MySQL 的最大键长度为 1000 字节让我觉得我做错了什么。这个数据库可以改进吗?或者它是这样的吗?

我不知道 MySQL 中索引的内部工作原理以及涉及的开销量,所以我认为这么大的键很可能效率不高。

感谢您的帮助。

最佳答案

使电子邮件成为唯一索引可以作为约束并改进电子邮件的查找,但为什么不减小电子邮件字段的大小呢?您打算拥有多少个 254 个字符的电子邮件地址,您可以通过将列设为 varchar(128) 来牺牲它们吗?我不会将它用作您的主键,请保留您的自动递增 bigint。

就其他最佳实践而言,为什么要将 user_ 附加到用户表中的每一列?用户表中是否有不适用于用户记录的列?只需使用 idemail 等...编写查询时 user.iduser.emailuser.user_iduser.user_email。此外,当您在其他表中使用外键时,您只需将它们称为 user_id,由此我可以看出外键是 id用户表。在整个数据库中始终如一地执行此操作。

关于mysql - MySQL 中的大型唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13631190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com