OStack程序员社区-中国程序员成长平台

标题: mysql - 在同一列上有一个唯一的和正常的索引有多大错? [打印本页]

作者: 菜鸟教程小白    时间: 2022-10-23 05:23
标题: mysql - 在同一列上有一个唯一的和正常的索引有多大错?

我有以下表结构

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/






    欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4