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 Extra1 SIMPLE ALL NULL NULL NULL NULL 1 Using where
将IXD_EMAIL添加到表中时,相同的查询显示:
id select_type type possible_keys key key_len ref rows Extra1 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