尚硅谷-mysql专项训练-索引

1.为什么使用索引

索引就像书的目录,有目录添加了索引就能通过索引 快速查询,没目录就得全表扫描 ,数组查询快增删满,链表查询慢增删快,有没有查询和增删都还不错得数据结构?
树可以均衡查询和增删效率 ,可以大幅度减少磁盘的IO次数

  1. 索引的优缺点

  2. InnoDB索引推演

a.数据量较少时,在一个页(16KB)中查找即可

b.数据量比较大,在多个页当中去搜索,用索引快速定位在哪个页中,再从页中快速定位到哪个槽

4.设计索引

  • 每一页的结构


    一页放不下,要多个页装载更多的数据,插入进去后,还要排序,所以要记录移动


  • 虽然上面页和页之间通过链表排好序了,但是如果通过从第一个页开始遍历,那查询效率就会很差.
  • 需要给所有的页再建立一个目录项,这个目录项就叫做索引

    让目录项(索引)也以链表的形式连接起来,形成一个目录页(存的都是目录)

    单个目录页 :可以快速通过扫描目录页,再通过目录页扫描数据页,只需要IO两次,加载2个页就能查到数据

    多个目录页 如果第一次IO,目录页没查到,就要加载第二个目录页
  • 多级目录 在数据量非常大的情况,可以减少IO次数
  • B+树的数据结构
  • B+树一般来说不会超过4层(4次IO) 有3层就能存1亿的数据

5.常见索引分类

  • 聚簇索引和非聚簇索引



  • 非聚簇索引(二级索引)

  • 非聚簇索引c2的本质和c1没多少差别
  • 回表,由于非聚簇索引只存了c2和c1字段,没有c3字段,所以要通过c2查到c1,通过c1再去查c3
  • 一个聚簇索引,多个非聚簇索引

  • 联合索引



注意项


MyISAM与InnoDB对比

  • 索引的空间时间上的代价,要合理的去创建索引

Mysql数据结构选择的合理性



为什么不用Hash索引,而用B+树索引? 不够通用

相关推荐
老纪的技术唠嗑局26 分钟前
把 seekdb 塞进 iOS App:让混合检索嵌入手机
数据库
ClouGence1 小时前
开源数据库管理工具 CloudDM 新版本发布,支持 OpenSearch、IoTDB 数据源
数据库·开源
徐小黑ACG2 小时前
Redis-基础
数据库·redis·缓存
火山引擎开发者社区2 小时前
案例实践 | 让 Agent 读懂业务口径:ContextSearch 在广告数据查询中的实践
数据库
10年前端老司机3 小时前
Milvus 8种检索能力实践
数据库·python·agent
aiks_yuan3 小时前
MySQL 深分页 LIMIT 越翻越慢怎么办:300 万行实测 OFFSET、延迟关联和 keyset 的耗时差距(MySQL 8.2)
mysql
Decay__3 小时前
14_MySQL 高可用与容灾架构 —— MGR / InnoDB Cluster / Keepalived+VIP / 双主 / 读写分离 / 两地三中心
运维·数据库·sql·mysql·架构
freejackman4 小时前
【实战三】撕开脱敏盲区:深度解析 CASE WHEN 与窗口函数血缘
大数据·数据库·sql
codigger6 小时前
线上数据库连接池打满:从应急止损到架构根治的完整方案
数据库·sql·程序员
倔强的石头_6 小时前
集中式与分布式怎么选?我把手头11套系统重新过了一遍秤
数据库