• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

mysql - 在同一列上有一个唯一的和正常的索引有多大错?

[复制链接]
菜鸟教程小白 发表于 2022-10-23 05:23:41 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有以下表结构

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/

    回复

    使用道具 举报

    懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关注0

    粉丝2

    帖子830918

    发布主题
    阅读排行 更多
    广告位

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap