我正在为我创建的网站实现一个非常简单的用户数据库,自然而然地,我希望尽可能接近“最佳实践”。该数据库使用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中索引的内部工作原理以及涉及的开销量,因此我认为这样一个如此大的键可能并不高效。
感谢您的帮助。