我正在为我正在创建的网站实现一个非常简单的用户数据库,自然我想确保我的工作尽可能接近“最佳实践”。数据库在 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 中索引的内部工作原理以及所涉及的开销量,所以我认为这么大的键很可能效率不高。
谢谢您的帮助。