在MySQL中,最常用的两个存储引擎是MyISAM和InnoDB,它们对索引的实现方式是不同的。

MyISAM:data存的是数据地址。索引是索引,数据是数据。索引放在XX.MYI文件中,数据放在XX.MYD文件中,所以也叫非聚集索引。

InnoDB:data存的是数据本身。索引也是数据。数据和索引存在一个XX.IDB文件中,所以也叫聚集索引。

说下聚簇和非聚簇索引,聚簇和非聚簇索引都是B+树的数据结构。

聚簇索引:将数据存储和索引放在一起、并且是按照一定的顺序组织的,找到索引也就找到了数据,数据的物理存放顺序与索引顺序是一致的,即:只要索引是相邻的,那么对应的数据一定也是相邻的存放在磁盘上的。

非聚簇索引:叶子节点不存储数据,存储的是数据行地址,也就是说根据索引查找到数据行的位置再去磁盘查找数据,这就有点类似一本书的目录,比如要找到第三章第一节,那就现在目录里面查找,找到对应的页码后再去对应的页码看文章。

聚簇索引的优势:

1、查找通过聚簇索引可以直接获取到数据,相比非聚簇索引需要第二次查询(覆盖索引除外)效率要高

2、聚簇索引对范围查询的效率很高,因为其数据是按照大小排列的

3、聚簇索引适合用在排序场合,非聚簇索引不适合。

聚簇索引的劣势:

1、维护索引代价大,特别是插入新行或者主键被更新导致要分页的时候。建议在大量插入新行后,选择负载较低的时间段,通过OPTIMIZE TABLE优化表

2、表因为使用UUID作为主键,使数据存储稀疏,这就会出现聚簇索引有可能会比全表扫面更慢,所以建议使用int的auto_increment作为主键。

3、如果主键比较大的话,那辅助索引将会变得更大,因为辅助索引的叶子节点存储的是主键值,过长的主键值,会导致非叶子节点占用更多的物理空间

其他:

InnoDB中一定有主键,主键一定是聚簇索引,不手动设置,则会使用一个unique索引作为主键索引,没有unique索引,则会使用数据库内部的一个隐藏行id来当作主键索引。在聚簇索引之上创建的索引称为辅助索引,辅助索引访问数据总是需要二次查找,非聚簇索引都是辅助索引,像复合索引,前缀索引、唯一索引。辅助索引叶子节点存储的不再是行的物理位置,而是主键值。

MyISM使用的是非聚簇索引,没有聚簇索引。

mysql之聚簇索引与非聚簇索引相关推荐

  1. mysql 聚簇索引和非聚簇索引_聚簇索引和非聚簇索引

    聚簇索引并不是一种单独的索引类型,而是一种数据存储方式.具体细节依赖于其实现方式. MySQL数据库中innodb存储引擎,B+树索引可以分为聚簇索引(也称聚集索引,clustered index)和 ...

  2. mysql 聚簇索引和非聚簇索引_MySQL学习之——索引

    转自:CSDN MySQL是目前绝大多数互联网公司使用的关系型数据库,它性能出色.资源丰富.成本低廉,是快速搭建互联网应用的首选关系型数据库.但是,俗话说,"好马配好鞍",仅仅会使 ...

  3. mysql 聚簇索引和非聚簇索引_图文并茂,说说MySQL索引

    点击上方 小伟后端笔记 ,选择 星标 公众号 重磅资讯.干货,第一时间送达 作者:小小木的博客来源:cnblogs.com/wyc1994666/p/10831039.html 序 开门见山,直接上图 ...

  4. 在mysql中建立聚簇索引_给我一分钟,让你彻底明白MySQL聚簇索引和非聚簇索引...

    推荐阅读:吊打面试官!MySQL灵魂100问,你能答出多少? MySQL的InnoDB索引数据结构是B+树,主键索引叶子节点的值存储的就是MySQL的数据行,普通索引的叶子节点的值存储的是主键值,这是 ...

  5. Mysql聚簇索引和非聚簇索引原理(数据库)

    一.'页'和操作系统的关系 ①为什么要有内存管理? 我们知道,一个进程完成他的功能,需要访问磁盘加载数据到内存然后等待进入cpu运算,因为数据量大小远远大于内存大小.因此提出虚拟内存概念.虚拟内存就是 ...

  6. MySQL中Innodb的聚簇索引和非聚簇索引

    聚簇索引 数据库表的索引从数据存储方式上可以分为聚簇索引和非聚簇索引(又叫二级索引)两种.Innodb的聚簇索引在同一个B-Tree中保存了索引列和具体的数据,在聚簇索引中,实际的数据保存在叶子页中, ...

  7. mysql的聚簇索引和非聚簇索引

    mysql的聚簇索引和非聚簇索引 1.一个表中只能有一个索引吗? 可以按照需求来创建多个索引,但不要太多. 2.每一个索引是一棵B+树,还是所有的索引共用一棵B+树? 一个索引一棵B+树. 3.如果有 ...

  8. MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引

    一.索引类型 索引根据底层实现可分为B-Tree索引和哈希索引,大部分时候我们使用的都是B-Tree索引,因为它良好的性能和特性更适合于构建高并发系统. 根据索引的存储方式来划分,索引可以分为聚簇索引 ...

  9. MySQL聚簇索引和非聚簇索引的原理及使用

    从数据结构角度 1.B+树索引 2.hash索引 3.FULLTEXT索引(InnoDB引擎5.7以后支持) 4.R-Tree索引(用于对GIS数据类型创建SPATIAL索引) 问题:这些索引的区别跟 ...

  10. Mysql数据库索引的理解及聚簇索引和非聚簇索引的区别

    Mysql数据库索引的理解及聚簇索引和非聚簇索引的区别 概念 索引是帮助Mysql搞笑获取数据的数据结构 对Mysql数据库来讲,其核心就是存储引擎,而索引就是属于存储引擎级别的概念,不同的存储引擎对 ...

最新文章

  1. K8S 最佳实践-映射外部服务 Endpoints / ExternalName
  2. 7、Java并发性和多线程-如何创建并运行线程
  3. telnet工具_Telnet进入Linux时出现乱码
  4. 【算法】深度优先搜索遍历的应用 设计算法以求解无向图G的连通分量的个数和无向图G的边数
  5. UCF转XDC工具说明文档
  6. Backblaze发布2016年2季度硬盘可靠性报告
  7. 基于tensorflow深度学习的中文的命名实体识别
  8. java+ssm+mysql房屋租赁管理系统(源码+论文)
  9. java怎么开发app_如何开发一款APP
  10. 如何用Visio画出总线(空心的箭头)
  11. 中科院计算机所沈阳待遇怎么样,中科院沈阳计算技术研究所计算机技术怎么样...
  12. Arduino (一)——面包板与固定导线长度
  13. Pacemaker部署
  14. 河南对口计算机本科学校有哪些,河南省计算机专业对口升学能上什么大学
  15. Android pins 模块化架构gradle配置
  16. HMS Core Insights第二期直播预告——华为定位技术让你重拾方向感
  17. 自考生三级跳成博士生 从英语零分到专业讲师
  18. 如何在代码中判断当前设备是iPhone 4/4S还是iPhone 5?
  19. [股市]散户高手的炒股心得(收藏)
  20. 假如我国国民生产总值的年增长率为7%,计算10年后我国的国民生产总值与现在相比增长多少百分比。

热门文章

  1. 图像处理相关算法之饱和度调整
  2. VC学习资料收集(12):VC小知识总结
  3. anchor机制讲解
  4. Python 将jpg批量转换为png
  5. 腾讯AI Lab:AI辅助诊疗系统面临的三大技术挑战
  6. c++项目实习,药店药品管理系统
  7. 机器学习:04 Kaggle 信用卡欺诈
  8. OpenCV.反阈值二值化
  9. PK61键盘使用说明
  10. 数据库设计1-数据库设计简述