gpt4 book ai didi

mysql - UNIQUE 约束是否会自动在字段上创建索引?

转载 作者:IT老高 更新时间:2023-10-28 12:51:54 26 4
gpt4 key购买 nike

我应该在 email 列上定义一个单独的索引(用于搜索目的),还是该索引是与 UNIQ_EMAIL_USER 一起“自动”添加的 约束?

CREATE TABLE IF NOT EXISTS `customer` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`first` varchar(255) NOT NULL,
`last` varchar(255) NOT NULL,
`slug` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQ_SLUG` (`slug`),
UNIQUE KEY `UNIQ_EMAIL_USER` (`email`,`user_id`),
KEY `IDX_USER` (`user_id`)
) ENGINE=InnoDB;

EDIT:根据 Corbin 的建议,我在空表上查询了 EXPLAIN SELECT * FROM customer WHERE email = 'address'。这是结果,我不知道如何解释:

id select_type type possible_keys key  key_len ref  rows Extra
1 SIMPLE ALL NULL NULL NULL NULL 1 Using where

向表中添加 IXD_EMAIL 时,相同的查询显示:

id select_type type possible_keys key       key_len ref   rows Extra
1 SIMPLE ref IDX_EMAIL IDX_EMAIL 257 const 1 Using where

最佳答案

唯一键 是索引的一种特殊情况,其作用类似于添加了唯一性检查的常规索引。使用 SHOW INDEXES FROM customer 你可以看到你的唯一键实际上是 B-tree 类型的索引。

(email, user_id) 上的 复合索引 就足够了,您不需要仅在电子邮件上使用单独的索引 - MySQL 可以使用复合索引的最左侧部分.在某些边界情况下,索引的大小可能会减慢您的查询速度,但在您真正遇到它们之前不要担心它们。

至于测试索引的使用,你应该首先用一些数据填充你的表,让优化器认为使用该索引实际上是值得的。

关于mysql - UNIQUE 约束是否会自动在字段上创建索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9764120/

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