索引简述

索引的目的在于提高查询效率,类比字典;实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,索引列也是要占用空间;

常见的MySQL主要有两种结构:Hash索引B+ 树索引,我们使用的是InnoDBMyISAM引擎,默认的都是B+树;

为什么用 B+ 树做索引而不用哈希表做索引?

1、哈希表是把索引字段映射成对应的哈希码然后再存放在对应的位置,这样的话,如果我们要进行模糊查找的话,显然哈希表这种结构是不支持的,只能遍历这个表。而B+树则可以通过最左前缀原则快速找到对应的数据。

2、如果我们要进行范围查找,例如查找ID为100 ~ 400的人,哈希表同样不支持,只能遍历全表。

3、索引字段通过哈希映射成哈希码,如果很多字段都刚好映射到相同值的哈希码的话,那么形成的索引结构将会是一条很长的链表,这样的话,查找的时间就会大大增加。

【主键索引】和【非主键索引】的区别

主键索引和非主键索引是有区别的,主键索引存放的值是整行字段的数据,而非主键索引上存放的值不是整行字段的数据,而是存放主键字段的值

其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引

如下图:ID是主键,K是非主键

  1. 如果查询语句是 select * from table where ID = 100,即主键查询的方式,则只需要搜索 ID 这棵 B+树。
  2. 如果查询语句是 select * from table where k = 1,即非主键的查询方式,则先搜索k索引树,得到ID=100,再到ID索引树搜索一次,这个过程也被称为回表。

为什么建议使用【主键自增】的索引

但是如果插入的是 ID = 350 的一行数据,由于 B+ 树是有序的,那么需要将下面的叶子节点进行移动,腾出位置来插入 ID = 350 的数据,这样就会比较消耗时间,如果刚好 R4 所在的数据页已经满了,需要进行页分裂操作,这样会更加糟糕。

但是,如果我们的主键是自增的,每次插入的 ID 都会比前面的大,那么我们每次只需要在后面插入就行, 不需要移动位置、分裂等操作,这样可以提高性能。也就是为什么建议使用主键自增的索引;

【主键索引】和【非主键索引】相关推荐

  1. MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析...

    文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...

  2. mysql非主键索引_主键索引和非主键索引的区别

    1. 什么是最左前缀原则? 以下回答全部是基于MySQL的InnoDB引擎 例如对于下面这一张表 如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下 如果我们要进行模糊查 ...

  3. mysql非主键索引_主键索引和非主键索引解析

    1. 什么是最左前缀原则? 以下回答全部是基于MySQL的InnoDB引擎 例如对于下面这一张表 如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下 如果我们要进行模糊查 ...

  4. Mysql主键索引与非主键索引

    Mysql主键索引与非主键索引 前言 InnoDB引擎 主键索引: 非主键索引 MySIAM引擎 主键索引 非主键索引 InnoDB和MyISAM的区别 前言 什么是B树: B树也叫B-树,是一棵多路 ...

  5. 数据库索引相关(主键索引和非主键索引区别)

    索引基础 关于索引的知识可以看:SQL索引(INDEX). 简单概括就是:为数据库某些字段增加索引是可以加快查询速度的,并且一个表是可以创建多个索引的,而一个索引可以包含多个字段. 如果不使用索引,则 ...

  6. MyCat分片规则(全局表,ER分片表,多对多关联,主键分片VS非主键分片),MyCat常用的分片规则(15中分片规则),自定义MyCat分片规则,其它术语

    1 MyCat分片规则 数据切分中重要的几条原则,其中有几条数据冗余,表分组(Table Group). 1.1全局表 如果你的业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或数据量 ...

  7. 主码索引、聚集索引、非主码索引(辅助索引)、唯一索引、外键索引、复合索引、非主码索引、聚集主码(聚集索引)、单列索引、多列索引、普通索引等...

    强烈建议看了第一个参考文献再来看这个篇博文,因为此处不准备讲底层数据结构的实现. 索引:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构.其 ...

  8. Mysql主键索引与非主键索引区别

    什么是索引 MySql官方索引的定义:索引(Index)是帮助MySql高效获取数据的数据结构,索引的目的在于提高查询效率,类比字典:实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录 ...

  9. 【mysql】聚簇索引(聚集索引)和非聚簇索引(二级索引、辅助索引)的区别

    文章目录 总结 1. 聚簇索引 一个坑 2. 非聚簇索引 3. 二级索引 总结 聚簇索引也叫聚集索引.,并不是一种单独的索引类型,而是一种数据存储方式.那么可以理解聚簇索引是一种抽象概念,在具体实现的 ...

  10. sql中添加唯一索引(非主键)

    if OBJECT_ID('tempdb..#tem') is not null drop table #tem create table #tem (aa nvarchar(20)) alter t ...

最新文章

  1. 微服务,微架构[五]之springboot读取properties文件
  2. iOS中EXC_BAD_ACCESS解决办法
  3. Spring5参考指南:IOC容器
  4. LeetCode 654. 最大二叉树(递归)
  5. 求一批整数中出现最多的个位数字
  6. 批量ping IP并检测IP延迟率和丢包率脚本
  7. 从零开始搭二维激光SLAM --- 总结
  8. RK G68三模说明书
  9. linux eqep驱动框架,【活动结束】《基于28377的伺服驱动系统调试》第一期/共......
  10. 计算机用户配置如何查看,怎么查看电脑内存和配置 教你查看电脑真实配置的方法...
  11. if 条件结构与switch条件选择结构
  12. 微信点餐系统要服务器吗,微信点餐系统,钉钉点餐系统
  13. springboot2.x 集成百度 ui-dgenerator生成分布式唯一id
  14. 市场调研报告-全球与中国熔接器市场现状及未来发展趋势
  15. 空洞骑士复活歌女玛丽莎的方法(复活其他灵魂NPC同理)
  16. 浅谈开发与研发之差异
  17. java并发编程实战(二)
  18. SolidWorks 2010 SP0.0 三维机械设计
  19. 本科大数据专业该怎么上?
  20. oracle有什么发展方向,OracleDBA的前景

热门文章

  1. 模板方法模式 java
  2. 实验一 静态代码编码规范审计实验
  3. 泰坦尼克号建模分析-你能活下来吗?
  4. Java求三角形面积(含可运行代码)
  5. 关于modbus rtu协议的CRC(循环冗余校验)在线计算
  6. linux下判断文件和目录是否存在[总结]
  7. Qt Designer编辑伙伴
  8. 景观生态学原理| 7 景观生态规划与设计
  9. iomanip在c语言中用什么代替,关于#include iomanip中iomanip的作用~
  10. 再推新品双屏翻译机,科大讯飞能否站稳C端江湖?