mysql innerdb 索引_mysql – innodb表中用户名列的最佳索引计划

实施用户名唯一性

如果要对存储在用户名列中的值强制实施唯一性,并且还将user_id列设置为相关表的PRIMARY KEY(PK),则可能对执行

用于用户名列.

这种情况意味着,在逻辑层面,用户名将是ALTERNATE KEY(AK). AK是列或列的组合,其包含唯一标识certan行但未被选择为相关表的PK的值;每个表可以有零个,一个或多个AK.如上所述,它们通常通过UNIQUE约束在SQL DDL结构中定义,该约束在物理级别由UNIQUE索引提供.

逻辑和物理层面

因为在构建关系数据库时(区别于所选平台)区分逻辑和物理方面是至关重要的,您可能会发现帮助this answer中包含的概念和链接.

显示警告

如果要向尝试输入已经使用的用户名值的人显示消息,则应在可以访问数据库的应用程序代码中开发此类功能.

设置列的长度

如果您不想允许长度大于18个字符的用户名值,那么您可能希望相应地定义列大小,即VARCHAR(18),因此您可以从MYSQL参考手册中找到以下内容的值关于

从中我将突出以下段落:

The CHAR and VARCHAR types are declared with a length that indicates the maximum number of characters you want to store. For example, CHAR(30) can hold up to 30 characters.

前缀和全文索引

@Ypercube丰富了this answer,回答了有关某些类型索引的个别问题:

Can I use Prefix index?

从技术上讲,你可以,但没有理由.前缀索引很少 – 或从不 – 在MySQL中有用.如果要将用户名的长度限制为18,则列应为VARCHAR(18)而不是(50).如果在用户名中只允许使用ASCII字符,则该列应具有ascii字符集而不是UTF-8.即使你保留VARCHAR(50),索引仍然应该在整个列中,而不是前缀.

What about a Full Text index?

不,你也不需要它们.全文索引适用于想要在大文本中搜索单词或短语的情况.对你的情况没用.一个简单的(唯一的)B树索引是最好的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值