广告
返回顶部
首页 > 资讯 > 数据库 >MySQL之主键索引排序失效问题
  • 689
分享到

MySQL之主键索引排序失效问题

MySQL主键索引主键索引排序失效MySQL索引失效 2022-12-27 15:12:06 689人浏览 泡泡鱼
摘要

目录主键索引排序失效现在初始化几行数据查一下所有记录查看一下执行计划总结主键索引排序失效 环境:Mysql8 有一张用户信息表user_info,建表DDL如下: CREATE TABLE `user_info` (

主键索引排序失效

环境:Mysql8

有一张用户信息表user_info,建表DDL如下:

CREATE TABLE `user_info` (
  `id` int(11) NOT NULL COMMENT '用户编号',
  `age` int(11) NOT NULL COMMENT '用户年龄',
  PRIMARY KEY (`id`),
  KEY `idx_age` (`age`) USING BTREE COMMENT '年龄索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

只有两列,第一列用户编号id做主键,第二列用户年龄age有一个普通索引idx_age

现在初始化几行数据

INSERT INTO `user_info` (`id`,`age`) VALUES(1,1),(5,3),(7,8),(11,12);

查一下所有记录

MySQL之主键索引排序失效问题

接着往这个表里插入一行数据(6,1),猜测一下这行数据最终会插入在什么位置?

可能大部分人都会认为插入在(5,3)(7,8)之间,因为id=6的话,5<6<7。

但是再次查看结果,发现并符合预期,而是插入在了(1,1)(5,3)之间:

MySQL之主键索引排序失效问题

看起来效果就像是age变为了主键,根据age默认排序了,或者说主键索引排序失效。

这是因为在mysql底层实现中,对于像user_info这种特殊的表,有特殊的处理方式。这张user_info表的特殊点在于,只有两列,一列是主键,另一列也有索引。

这时候非主键的age这一列就是一个覆盖索引,因为age的索引可以查到所有字段。

Mysql内部会认为访问数据的时候,覆盖索引的效率比主键索引高,所以维护默认的排序会优先根据覆盖索引列来进行。

查看一下执行计划

MySQL之主键索引排序失效问题

  • type=index,代表只遍历了索引树;
  • key=idx_age,代表真正用到了索引;
  • Extra=Using index,代表覆盖索引生效,在索引树中就可以查到所需数据,避免了回表扫描表数据文件。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL之主键索引排序失效问题

本文链接: https://www.lsjlt.com/news/175955.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL之主键索引排序失效问题
    目录主键索引排序失效现在初始化几行数据查一下所有记录查看一下执行计划总结主键索引排序失效 环境:mysql8 有一张用户信息表user_info,建表DDL如下: CREATE TABLE `user_info` ( ...
    99+
    2022-12-27
    MySQL主键索引 主键索引排序失效 MySQL索引失效
  • MySQL索引失效之隐式转换的问题
    目录常见索引失效:一、常见索引失效场景1、条件字段函数操作2、条件字段运算操作3、隐式类型转换4、隐式字符编码转换二、类型转换1、字符串转整型2、时间类型转换常见索引失效: 1. 条...
    99+
    2022-11-12
  • mysql排序失效问题的解决
    目录问题解决:问题 可以看到sql语句是没有问题的,但是排序缺出现问题 发现这个字段是varchar类型。不能直接排序 解决: 在不修改原有设计的情况下,只能改SQL了,我们需要...
    99+
    2022-11-13
  • mysql索引失效的十大问题小结
    目录背景一、查询条件包含or,可能导致索引失效二、如何字段类型是字符串,where时一定用引号括起来,否则索引失效三、like通配符可能导致索引失效。四、联合索引,查询时的...
    99+
    2022-11-12
  • 浅谈MySql整型索引和字符串索引失效或隐式转换问题
    目录问题概述问题重现问题引申结论问题概述 今天在上班时,DBA突然找出来一段sql,表示该sql存在隐式转换,不走索引。经过我们的查看后,发现是类型varchar的字段, 我们使用条...
    99+
    2022-11-12
  • MySQL索引失效后隐式转换的问题这么解决
    MySQL索引失效后隐式转换的问题这么解决,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。常见索引失效: 条件索引字段"不干净":函数操作、运算操作 隐式...
    99+
    2023-06-26
  • 解决mysql模糊查询索引失效问题的几种方法
    我们在使用like %通配符时常常会引起索引失效的问题。 这里,我们讨论一下like使用%的几种情况: 下列例子用到的索引(VC_STUDENT_NAME) 一、like ‘xx...
    99+
    2022-11-12
  • 如何解决MySql整型索引和字符串索引失效或隐式转换问题
    这篇文章主要为大家展示了“如何解决MySql整型索引和字符串索引失效或隐式转换问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决MySql整型索引和字符串索引失效或隐式转换问题”这篇文章...
    99+
    2023-06-25
  • Mysql 5.6 "隐式转换"导致的索引失效和数据不准确的问题
    背景 在一次进行SQl查询时,我试着对where条件中vachar类型的字段去掉单引号查询,这个时候发现这条本应该很快的语句竟然很慢。这个varchar字段有一个复合索引。其中的总条数有58989,甚...
    99+
    2022-05-17
    Mysql 5.6隐式转换导致的索引失效 Mysql 5.6隐式转换
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作