我有以下表结构
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;
您会注意到,我在 user_id 上有重复的索引:date_expired & user_id .我当然想要唯一索引,因为我想确保数据是唯一的。
重复索引的原因是因为没有 user_id 索引,我的主要搜索查询需要 4 秒。使用额外的索引需要 1 秒。查询正在加入 user_id 上的表并检查 date_expired .
该表只有 275 条记录。 在同一字段上拥有唯一且正常的索引有多糟糕? 当表纯粹是 id 时,索引比数据大有多糟糕?
Best Answer-推荐答案
我相信,如果您将唯一索引创建为 ( 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/
|