我有以下表结构
CREATE TABLE `table` (
`id` int(11) NOT NULL auto_increment,
`date_expired` datetime NOT NULL,
`user_id` int(11) NOT NULL,
`foreign_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `date_expired` (`date_expired`,`user_id`,`foreign_id`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
date_expired
& user_id
.我当然想要唯一索引,因为我想确保数据是唯一的。user_id
索引,我的主要搜索查询需要 4 秒。使用额外的索引需要 1 秒。查询正在加入 user_id
上的表并检查 date_expired
.我相信,如果您将唯一索引创建为 ( user_id
, date_expired
, foreign_id
),您将获得与在 user_id
上建立普通索引相同的好处只有唯一索引。 MySQL 可以使用任何索引的第一列以与 user_id
上的索引相同的方式减少连接中的行数。 .
见 MySQL's index documentation想要查询更多的信息。
您指的是id
模式中其他地方的 auto_increment 列以节省空间?由于您的唯一索引涵盖了表中的所有其他列,因此它本质上是一个主键本身,如果不是,则可以将其删除。
您可以通过在查询前加上 EXPLAIN 来检查查询正在使用哪些键。
关于mysql - 在同一列上有一个唯一的和正常的索引有多大错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/292230/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |