Dar*_*ein 6 mysql indexing unique-index
我有以下表格结构
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;
Run Code Online (Sandbox Code Playgroud)
正如您将注意到的,我在user_id上有重复的索引:date_expired&user_id.我当然想要唯一的索引,因为我想确保数据是唯一的.
重复索引的原因是因为没有user_id索引,我的主搜索查询需要4秒.使用额外的索引需要1秒钟.查询正在加入表user_id并进行检查date_expired.
该表只有275条记录.
我相信,如果您创建唯一索引为(user_id,date_expired,foreign_id),你会得到在具有正常指数同样的益处user_id只用唯一索引.MySQL可以使用任何索引的第一列来减少连接中的行数,其方式与索引相同user_id.
有关更多信息,请参阅MySQL的索引文档.
您是指id在架构中的其他位置使用auto_increment列来节省空间吗?由于您的唯一索引涵盖了表中的所有其他列,因此它本质上是主键本身,如果不是,则可以删除.
您可以通过在EXPLAIN前面添加前缀来查看查询所使用的密钥.