博客
关于我
Innodb,MyIsam,聚集索引和非聚集索引
阅读量:550 次
发布时间:2019-03-09

本文共 1498 字,大约阅读时间需要 4 分钟。

InnoDB 和 MyISAM 的区别及索引类型解析

InnoDB 和 MyISAM 是两种经常用于 MySQL 的存储引擎,它们在事务处理能力和性能适用场景上有显著差异,本文将从多个方面对两者进行对比,并详细解释聚集索引与非聚集索引的区别。

InnoDB 和 MyISAM 的主要区别

1. 事务处理

InnoDB 支持事务处理,能够保证数据的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),适用于需要高一致性和安全性的应用场景,特别是在涉及大量增删改查(CUD)操作的应用中。

MyISAM 不支持事务,其转移性操作可能导致数据不一致性,通常用于不需要高一致性的查询优化场景,如只进行SELECT操作的应用。

2. 键控制

InnoDB 采用行级锁机制,锁的粒度较小,能够更好地避免并发冲突,但在并发高并发场景下可能存在性能瓶颈。

MyISAM 采用表级锁机制,锁的粒度较大,但锁的释放延迟较高,在高并发情况下可能导致更多的性能问题。

3. 查询效率

InnoDB 在处理复杂查询时表现一般,特别是在过多索引导致多次索引查询的情况下,性能相对较低。

MyISAM 则在只需要进行多个复杂查询和不需要高一致性的场景下表现优异,能够在更高的速度下完成查询任务。

4. 索引类型

聚集索引

  • 属于 InnoDB 引擎,聚集索引使用的是主键的 B+ 树结构或,若没有主键则使用表中第一列作为聚集索引。
  • 聚集索引的所有行数据以主键顺序排列,每一项聚集索引节点都包含相应的数据记录。
  • 一个表只能有一个聚集索引,其他索引只能是普通索引,指向聚集索引节点。

非聚集索引

  • 属于 MyISAM 引擎,非聚集索引和普通索引无明显区别,非聚集索引存储的是索引树节点的位置信息。

5. 外键支持

InnoDB 支持外键约束,可以在定义表时为外键建立约束。

MyISAM 不支持外键约束,不允许在表中定义外键关系。

6. 使用场景

  • InnoDB:适用于需要高一致性的应用程序,需要处理大量增删改查。
  • MyISAM:适用于不需要事务支持但需要频繁查询的应用程序,尤其是只涉及读取和简单更新的情况。

聚集索引与非聚集索引的对比

聚集索引

  • 数据存储方式:聚集索引按照主键(或表中第一列)进行B+树排列,每个索引节点包含行数据。
  • 普通索引:除一个聚集索引外,其余索引为普通索引,普通索引节点指向聚集索引节点。
  • 查询特点:查询时会沿着聚集索引找到对应的记录,然后根据需要访问其他字段的数据。
  • 优点
    • 查询速度快。
    • 可以通过聚集索引快速定位数据。
    • 支持多种索引类型,如正文索引、前缀索引等。
  • 非聚集索引

  • 数据存储方式:非聚集索引作为独立的索引单独存在,索引树的节点存储的数据是记录的位置。
  • 查询特点:普通索引查询同样需要通过多个索引节点找到对应的数据记录。
  • 优点
    • 易于理解和管理。
    • 查询速度不会明显下降。
    • 不需要像聚集索引那样关联其他索引。
  • 样例说明

    聚集索引示例

    • 设有表 t1,主键为 id,并创建了聚集索引 id 索引和普通索引 name
    • 数据存储方式:在索引树的叶子节点存有 id 值,对应的每个叶子节点都有相应的数据记录。

    非聚集索引示例

    • 同样为表 t2,定义了一个非聚集索引 class,索引树只存储查询路径,而不存储具体的数据记录位置。

    总结来说,InnoDB 和 MyISAM 是两种适用于不同场景的存储引擎,选择哪一种主要取决于应用的需求和性能要求。在实际应用中,可以根据业务需求选择合适的存储引擎和索引类型,充分发挥数据库的性能。

    转载地址:http://oaasz.baihongyu.com/

    你可能感兴趣的文章
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>
    Openlayers高级交互(2/20):清除所有图层的有效方法
    查看>>
    Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
    查看>>
    Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
    查看>>
    Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
    查看>>
    Openlayers高级交互(5/20):右键点击,获取该点下多个图层的feature信息
    查看>>
    Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
    查看>>
    Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
    查看>>
    Openlayers高级交互(8/20):选取feature,平移feature
    查看>>
    Openlayers高级交互(9/20):编辑图形(放缩、平移、变形、旋转),停止编辑
    查看>>
    Openlayers:DMS-DD坐标形式互相转换
    查看>>
    openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
    查看>>
    OpenLDAP(2.4.3x)服务器搭建及配置说明
    查看>>
    OpenLDAP编译安装及配置
    查看>>
    Openmax IL (二)Android多媒体编解码Component
    查看>>
    OpenMCU(一):STM32F407 FreeRTOS移植
    查看>>
    OpenMCU(三):STM32F103 FreeRTOS移植
    查看>>