博客
关于我
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/

    你可能感兴趣的文章
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置——不记录指定文件类型日志
    查看>>
    nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    nginx配置全解
    查看>>
    Nginx配置参数中文说明
    查看>>
    nginx配置域名和ip同时访问、开放多端口
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>