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

我应该在列上 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;

:根据科宾的建议,我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树类型索引。

一个 综合指数(email, user_id)是不够的,你不需要只电子邮件单独的索引-

MySQL能使用复合指数的最左边的部分。在某些边界情况下,索引的大小可能会使查询变慢,但是在真正遇到它们之前,您不必担心它们。

至于测试索引的使用,您应该首先在表中填充一些数据,以使优化程序认为使用该索引确实值得。

以上是 UNIQUE约束是否自动在字段上创建索引? 的全部内容, 来源链接: utcz.com/qa/434330.html

回到顶部