把原站信息经过筛选贴过来,用于自己备忘。原站: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那个比较好,从上面的的解释中就能看出是前者比较好,毕竟不需要回表查询数据,效率上应该比较快的

最新文章

  1. Socket开发框架之框架设计及分析
  2. 编译器角度看C++复制构造函数
  3. laravel homestead vagrant box安装使用,问题,及相关命令
  4. 老去的JEE,焕发生命
  5. 【j2ee】div浮动层拖拽
  6. Win32 进程间通信的分析与比较(13种方法)
  7. magnum devstack部署
  8. listener.ora
  9. JAVA基础--IO流
  10. shell基本理论知识
  11. Hadoop 2.6.0 完全分布式平台搭建
  12. centos通过yum安装mysql
  13. php 函数小技巧(一)
  14. java io系列18之 CharArrayReader(字符数组输入流)
  15. 关于nginx报错/usr/share/nginx/html/jiankongshare" failed (2: No such file or directory)的问题解决
  16. Visual Ribbon Editor for CRM 连接
  17. 还在手工制作APP规范文档?这款设计神器你不容错过
  18. 集合栈计算机(UVa12096)
  19. 解决 $ npm install node-sass --save-dev 失败的问题
  20. LOJ #6035.「雅礼集训 2017 Day4」洗衣服 贪心

热门文章

  1. CentOS7安装Oracle 11g数据库
  2. Gitlab 备份还原/迁移
  3. java架构之路-(nginx使用详解)nginx的安装和基本配置
  4. 三维网格细分算法(Catmull-Clark subdivision & Loop subdivision)附源码(转载)
  5. Asp.Net MVC 的19个管道事件
  6. 基于OpenCV.Net连通域分析进行文本块分割
  7. tf.reduce_sum() and tf.where()的用法
  8. 第九届极客大挑战——小帅的广告(二阶sql注入)
  9. JavaWeb项目 IDEA+Tomcat+Nginx 部署流程
  10. 基本 Python 面试问题