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

MySQL索引-2聚集索引探讨

本文目录

概述

innoDB中的索引

MyISAM中的索引

总结与开发经验


概述

  • 聚集索引不是一种索引类型,而是一种数据存储方式,表示数据以主键索引的顺序进行聚集存储

  • 【聚集】表示数据行和主键聚簇存储在一起,数据行在磁盘的排列和索引排序保持一致

  • innoDB中聚集索引根据表的主键构建一个B+树来组织数据,这个树的叶子节点直接存储行数据

不同存储引擎的索引方式不同,比如MyISAM中就没有使用聚集索引。

接下来,详细分析MySQL中innoDB与MyISAM存储引擎中数据组织形式与索引方式,从而进一步认识聚集索引的特点。

innoDB中的索引

设有如下数据表:

IDNAMECITY
5BobShanghai
8LeeBeijing
18SamWuhan
24RoseWuhan
40AlanNanjing
55HoboChengdu

innoDB的主键索引为聚集索引形式,示意图如下:

 

innoDB的主键索引中叶子节点存储的就是整个表的数据,可以说其主键索引文件与数据文件本质是同一个

在innoDB中,这种数据按照主键进行聚集的形式,叫做聚集索引。如果没有显示指定主键索引的话,MySQL会选取有非空且唯一约束的字段作为主键,如果这种字段也不存在,则自动创建一个隐藏字段作为主键,以确保数据可以按主键进行聚集。

而在innoDB中,辅助索引叶子节点存储的是主键值,如下图:

 

因此可以看出,通过辅助索引进行查询时,需要走两次索引:先走辅助索引获取主键,再走主键索引获取到数据。

MyISAM中的索引

在MyISAM同样存在主键索引和辅助索引,但是这两类索引本质并无区别,其叶子节点都是存储了数据的地址。示意如下:

 

所以说,MyISAM中的索引是非聚集的,即数据并不按照主键进行组织和聚集。

MyISAM中索引文件是独立于数据文件的,且通过主键索引和辅助索引查询数据的过程时一样的,这一点与innoDB不同。

总结与开发经验

  • 聚集索引并不是一种单独的索引类型,而是一种数据存储方式。聚集表示数据行和主键聚簇存储

    在一起,数据行在磁盘的排列和索引排序保持一致。

  • InnoDB中的主键索引是聚簇索引,其他索引(辅助索引)为非聚簇索引。

  • MyISAM中不使用聚集索引。

  • 聚集索引的优点:数据按照聚集索引排列顺序,当按主键进行搜索时,由于数据的聚集特点,MySQL不用频繁跨磁盘块提取数据,I/O次数减少,效率大大提高。

  • innoDB表的主键尽量选用单调字段,否则插入数据时需要调整B+树,使插入效率降低。

相关文章:

  • 【node.js从入门到精通】模块化+npm包详解
  • Android 面试需要哪些准备?
  • Vue进阶--render函数和jsx的使用
  • 嵌入式 Linux 入门(十、Linux 下的 C 编程)
  • Spring boot 使用QQ邮箱进行一个验证登入
  • <Linux系统复习>命令行参数和环境变量
  • Java框架详解1——Spring的设计思想
  • 【C++】类和对象 (下篇)
  • JAVA【数据库DB 一】
  • 行内元素和块级元素的区别
  • Jenkins配置用户权限
  • smart原则简单案例,java规则引擎使用场景
  • 2021全国大学生电子设计竞赛论文(智能送药小车(F题))(电赛论文模板)
  • 并联四足机器人项目开源教程(六)--- Cheetah开源项目的代码框架移植
  • 从零备战蓝桥杯——动态规划(递推篇)
  • 「译」Node.js Streams 基础
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 2019.2.20 c++ 知识梳理
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Bytom交易说明(账户管理模式)
  • eclipse的离线汉化
  • Kibana配置logstash,报表一体化
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • ReactNativeweexDeviceOne对比
  • SegmentFault 2015 Top Rank
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 漂亮刷新控件-iOS
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微信小程序设置上一页数据
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 06-01 点餐小程序前台界面搭建
  • FaaS 的简单实践
  • 说说我为什么看好Spring Cloud Alibaba
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (LeetCode 49)Anagrams
  • (办公)springboot配置aop处理请求.
  • (多级缓存)多级缓存
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (三) diretfbrc详解
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)iOS字体
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .net core 3.0 linux,.NET Core 3.0 的新增功能