当前位置: 首页 > news >正文

MySQL之聚簇索引和非聚簇索引

1、什么是聚簇索引和非聚簇索引?

聚簇索引,通常也叫聚集索引。

非聚簇索引,指的是二级索引。

下面看一下它们的含义:

1.1、聚集索引选取规则

  • 如果存在主键,主键索引就是聚集索引。
  • 如果不存在主键,将使用第一个唯一索引作为聚集索引。
  • 如果没有主键或唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。

说到聚集索引,就不得不提到“回表查询”了。

2、什么是回表查询?

通过二级索引找到对应的主键值,到聚集索引中查找整行数据,这个过程就是回表。

示例:有user表如下:

CREATE TABLE `user` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '技术主键',`name` varchar(100) DEFAULT NULL COMMENT '姓名',`age` int(11) DEFAULT NULL COMMENT '年龄',PRIMARY KEY (`id`),KEY `idx_1` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

这里,id作为主键,也就是聚集索引。name字段为普通索引,就是二级索引。

(1)假如此时有sql1:select * from user where id=1;

那么,id作为聚集索引,数据存储与索引放到了一块,索引结构的叶子节点保存了行数据,直接就可以得到整行数据【id=1,name=小明,age=18】

(2)假如又有sql2:select * from user where name='小明'; 

那么,此时就需要“回表查询”了。回表过程如下:

①因为建了“name”这个二级索引,(“select *”需要查整行数据);

②先用“小明”去二级索引中找到“小明”的id=1;

③再用“1”去找聚集索引,最终拿到整行数据。

http://www.lryc.cn/news/388055.html

相关文章:

  • Web后端开发之前后端交互
  • 520. 检测大写字母 Easy
  • vue的跳转传参
  • docker配置镜像源
  • MySQL高级-SQL优化-insert优化-批量插入-手动提交事务-主键顺序插入
  • 认识100种电路之振荡电路
  • SSH 无密登录配置流程
  • Python自动化运维 系统基础信息模块
  • 如何安装和配置Monit
  • 【redis】redis分片集群基础知识
  • Python 面试【★★★★】
  • Knife4j 2.2.X 版本 swagger彻底禁用
  • linux下mysql的定时备份
  • 【13】地址-比特币区块链的地址
  • 【数据结构】数据结构前置知识
  • 企业数据挖掘平台产品特色及合作案例介绍
  • C++初学者指南-3.自定义类型(第一部分)-基本自定义类型/类
  • iOS之如何创建.framework静态库
  • C程序设计谭浩强第五版
  • 石油化工厂为什么要用专业防爆手机?
  • 文本生成sql模型(PipableAI/pip-sql-1.3b)
  • 机器学习中的数学底蕴与设计模式
  • 【Android面试八股文】性能优化相关面试题:如何查找CPU占用?
  • 面试框架一些小结
  • c# 往window注册表写入数据后,未写入指定的路径
  • 树莓派4B_OpenCv学习笔记13:OpenCv颜色追踪_程序手动调试HSV色彩空间_检测圆
  • Golang | Leetcode Golang题解之第198题打家劫舍
  • 基于ruoyi-app的手机短信登录(uniapp)
  • 机器学习环境搭建
  • 2095.删除链表的中间节点