mysql 聚集索引,非聚集索引,覆盖索引区别。
把原站信息经过筛选贴过来,用于自己备忘。原站:https://www.cnblogs.com/aspwebchh/p/6652855.html
--------------------------------mysql执行计划关键字: explain----------------------------------------
聚集索引:
给表上了主键,那么表在内存上的由整齐排列的结构转变成了树状结构,也就是「平衡树」结构,换句话说,就是整个表就变成了一个索引。没错, 再说一遍, 整个表变成了一个索引,也就是所谓的「聚集索引」。 这就是为什么一个表只能有一个主键, 一个表只能有一个「聚集索引」,因为主键的作用就是把「表」的数据格式转换成「索引(平衡树)」的格式放置。
非聚集索引:
非聚集索引和聚集索引一样, 同样是采用平衡树作为索引的数据结构。索引树结构中各节点的值来自于表中的索引字段, 假如给user表的name字段加上索引 , 那么索引就是由name字段中的值构成,在数据改变时, DBMS需要一直维护索引结构的正确性。如果给表中多个字段加上索引 , 那么就会出现多个独立的索引结构,每个索引(非聚集索引)互相之间不存在关联。
区别在于, 通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据。
覆盖索引:
如果一个索引包含所有需要查询的字段的值,我们就称之为“覆盖索引”。因此不需要通过主键ID值的查找数据行的真实所在, 直接取得叶节点中name的值返回即可。
个人理解:
非聚集索引就是一般常用的索引,索引树的根节点是表的主键。
聚集索引就是主键组成的树,根节点是数据库真实数据的位置。
另外知识点:
许多数据库的文档会告诉读者:聚集索引按照顺序物理的存储数据到磁盘。但是试想下,如果聚集索引必须按照特定顺序存放物理记录,则维护成本显得非常高。所以,聚集索引的磁盘存储并不是物理上连续的,而是逻辑上连续。
(具体参考评论区,这样一直一直走 )
--------------------------------------------------------------------------
mysql开启了ICP的话,可以减少存储引擎访问基表的次数
下面来简单的介绍一下这三者的区别
using index :使用覆盖索引的时候就会出现
using where:在查找使用索引的情况下,需要回表去查询所需的数据
using index condition:查找使用了索引,但是需要回表查询数据
using index & using where:查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据
以上四点就能看出它们之前的区别,或许有部分人都存在疑惑 using index & using where 和using index condition那个比较好,从上面的的解释中就能看出是前者比较好,毕竟不需要回表查询数据,效率上应该比较快的
最新文章
- Socket开发框架之框架设计及分析
- 编译器角度看C++复制构造函数
- laravel homestead vagrant box安装使用,问题,及相关命令
- 老去的JEE,焕发生命
- 【j2ee】div浮动层拖拽
- Win32 进程间通信的分析与比较(13种方法)
- magnum devstack部署
- listener.ora
- JAVA基础--IO流
- shell基本理论知识
- Hadoop 2.6.0 完全分布式平台搭建
- centos通过yum安装mysql
- php 函数小技巧(一)
- java io系列18之 CharArrayReader(字符数组输入流)
- 关于nginx报错/usr/share/nginx/html/jiankongshare"; failed (2: No such file or directory)的问题解决
- Visual Ribbon Editor for CRM 连接
- 还在手工制作APP规范文档?这款设计神器你不容错过
- 集合栈计算机(UVa12096)
- 解决 $ npm install node-sass --save-dev 失败的问题
- LOJ #6035.「雅礼集训 2017 Day4」洗衣服 贪心
热门文章
- CentOS7安装Oracle 11g数据库
- Gitlab 备份还原/迁移
- java架构之路-(nginx使用详解)nginx的安装和基本配置
- 三维网格细分算法(Catmull-Clark subdivision &; Loop subdivision)附源码(转载)
- Asp.Net MVC 的19个管道事件
- 基于OpenCV.Net连通域分析进行文本块分割
- tf.reduce_sum() and tf.where()的用法
- 第九届极客大挑战——小帅的广告(二阶sql注入)
- JavaWeb项目 IDEA+Tomcat+Nginx 部署流程
- 基本 Python 面试问题