索引就像树的目录,是为了更快的找到所要找的内容(数据)。MySQL中,索引是在存储引擎层实现的,不同的存储引擎有不同的索引模型,如innodb是采用的是B+树的索引模型,本篇主要以innodb存储引擎的索引模型来讲解索引知识。

 1.innodb存储引擎的索引模型

  在innodb中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表,而innodb的索引模型是B+树,所以数据都存储在B+树上。

  每一个索引在innodb里面都对应一颗B+树,根据树的叶子节点的不同,索引分为主键索引(存的是整行数据)和非主键索引(叶子节点为主键),其中主键索引又称为聚簇索引,非主键索引称为二级索引。

  主键的长度越小,普通索引的叶子节点所占的空间就越少,从这个角度来说用自增主键对索引维护的代价要小很多。那在什么业务场景下可以用业务字段做索引呢,如下场景:

   a. 只有一个索引 ;b. 这个索引必须是唯一索引。这样就不用考虑其他索引的叶子节点的大小问题。

 2. 覆盖索引  

mysql> create table T (
ID int primary key,
k int NOT NULL DEFAULT 0,
s varchar(16) NOT NULL DEFAULT '',
index k(k))
engine=InnoDB;insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg');

  当执行查询语句 select * from T where k between (3,5);时mysql会先在 k 索引树上查找满足3 到 5 范围内叶子节点(即主键ID 100、500),然后到主键索引树上查找满足条件的行,这个查找过程称为回表。

  如果执行查询语句 select ID from T where k between (3,5);时,则在 k 索引树上即可查到满足条件的ID的值,而避免了回表,这种通过索引查询条件的结果即可“覆盖”查询需求称为覆盖索引,可见覆盖索引也是优化sql的一种很好的手段。

 3.最左前缀原则

  索引的维护也是需要成本的,因为有最左前缀原则,当建立一个联合索引(name,age)时,一般就不用单独建立name索引了。

  

  

转载于:https://www.cnblogs.com/quxiangxiangtiange/p/11016338.html

2.MySQL中的索引相关推荐

  1. mysql5.6 函数索引_聊聊MySQL中的索引

    关于MySQL中的索引使用 索引是数据库优化中最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的SQL性能问题. 索引的存储分类: 1.B-Tree索引:最常见的索引类型,大部分引擎都支 ...

  2. php普通索引和唯一索引,MySQL中普通索引和唯一索引的区别详解

    本篇文章介绍了MySQL中普通索引和唯一索引的区别,讲解很详细,希望对学习MySQL的朋友有帮助! 需要注意的是: redo log中的数据,可能还没有 flush 到磁盘,磁盘中的 Page 1 和 ...

  3. MySQL中的索引(主键索引)

    MySQL中的索引(主键索引篇) 主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值.一般是在建表的时候同时添加主键索引: 一.如何添加主键索引 修改表添加主键索引 Alter tab ...

  4. MySQL中的索引(唯一索引篇)

    MySQL中的索引(唯一索引篇) 唯一索引与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值. 一.如何添加唯一索引 直接创建唯一索引 Create unique index 索引名 on ...

  5. MySQL中的索引(普通索引篇)

    MySQL中的索引 一.索引 在关系型数据库中,索引是一种单独的.物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑 ...

  6. MySQL中的索引详讲

    转载自 https://www.cnblogs.com/whgk/p/6179612.html 序言 之前写到MySQL对表的增删改查(查询最为重要)后,就感觉MySQL就差不多学完了,没有想继续学下 ...

  7. 资源放送丨《 MySQL中的索引探究 - 2020云和恩墨大讲堂》PPT视频

    前段时间,墨天轮邀请到云和恩墨应用架构产品部总经理 巩飞 分享了直播<MySQL中的索引探究>,在这里我们共享一下PPT和视频,供大家参考学习. 本次分享讲述MySQL的索引原理,不同存储 ...

  8. 直播预告丨MySQL中的索引探究

    MySQL中的索引探究 - 08/05 本次分享讲述MySQL的索引原理,不同存储引擎对索引的支持情况.同时探究大家普遍关心的问题:MySQL在哪些操作中会用到索引?InnoDB引擎对索引做了哪些扩展 ...

  9. MySQL性能调优与设计——MySQL中的索引

    MySQL中的索引 InnoDB存储引擎支持以下几种常见索引:B+树索引.全文索引.哈希索引,其中比较关键的是B+树索引. B+树索引 InnoDB中的索引自然也是按照B+树来组织的,B+树的叶子节点 ...

最新文章

  1. CICC科普栏目|神经网络浅讲:从神经元到深度学习
  2. 关于IT企业如何建立内部wiki
  3. hihoCoder太阁最新面经算法竞赛18
  4. 【FFmpeg】FFmpeg 帮助文档使用
  5. ubuntu+VsCode+Cmake+eigen 开发eigen应用
  6. Angular 默认的Change detection策略及缺陷
  7. CRM_REPORT_RF_CHECK_AUTHORITY call CRM_REPORT_RF_AUTH_OBJ_ORD_LP
  8. X-Mas Musings –在Grails集成测试中不要使用随机服务器端口
  9. 软考信息安全工程师考试历年真题汇总及试题分布统计
  10. [Vue.js]实战 -- 电商项目(一)
  11. linux添加Mib库,Linux SNMP中的管理信息库(MIB)学习
  12. 在html中设置常量并做判断,写一篇我所理解的javascript编程规范
  13. Android添加拍照功能,Android自定义相机,添加水印
  14. 在XCode的一个项目中创建多个C/C++/Cpp文件并分别运行——创建多个target实现
  15. MATLAB 滤波函数的源代码
  16. L. Lifeguards(平面几何 点平分成两边)
  17. 【必须知道的职场情商训练7法】
  18. 仙剑3安卓移植版_仙剑奇侠传3安卓版
  19. SDN(一) 用OpenWRT将路由器刷成openflow交换机
  20. cartographer建图,重定位及发布消息结构为nav_msgs::Odometry的odom话题

热门文章

  1. unity3d 动态合批设置_Unity3D SkinnedMeshRenderer合批优化
  2. BeautifulSoup入门案例
  3. oracle数据库支持2颗cpu,2.3 Oracle数据库中常见的性能问题
  4. java 过滤脚本_【快学SpringBoot】过滤XSS脚本攻击(包括json格式)
  5. uniapp防抖操作
  6. 多线程中 start()和run()方法的区别
  7. GitBlit使用安装教程~
  8. c语言把数据存放在文件中,急求如何将下列C语言程序数据存储到文件中?
  9. php李捷,【问题解答】蝶泳手外划的作用
  10. HTML+CSS+JS实现 ❤️照相机快门图片动画特效❤️