mysql - 在 Varchar 上创建 MySQL 索引总是会产生 2 个索引?

标签 mysql database database-design optimization indexing

我的表中有一个 email 列,它是一个 VARCHAR(255)。大多数电子邮件只有 40-50 个字符长,其余字符只是在极少数情况下存在。因此,我只想索引电子邮件列的前 50 个字符。

我已经尝试用这个查询来做到这一点:

ALTER TABLE  `users` ADD INDEX (email(50) )

但是,这会创建 2 个索引,一个名为 email,另一个名为 email_2。第一个索引没有长度限制,第二个索引有 50 个字符的限制。

这是为什么?是否有任何解决方法,或者我别无选择,只能索引整个列?

最佳答案

为什么只索引前 50 个字符? MySQL 将足够聪明,只将索引中的空间用于实际数据。也就是说,它不会为每个条目分配 255 个字符的空间。因此,没有理由不按原样简单地索引整个列。

关于mysql - 在 Varchar 上创建 MySQL 索引总是会产生 2 个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6115440/

相关文章:

mysql - 用于在第二个数据库表中搜索不明确字段的 SQL

php - 从数据库中提取数据并放入 html 表中

sql - 在创建索引后重命名 SQLite 表/列/行

php - 它没有在答案数据库表中插入questionid

database - 如何从多个 SQLite 数据库中选择所有列

mysql - 数据库表和关系

php - 在构建像 Facebook 一样大、流量大、成功的网络应用程序时要考虑什么?

mysql - 防止 C 中的 SQL 注入(inject)

mysql - 如何将两个求和查询合并为一个?

php - 订购 while 循环数据