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

    你可能感兴趣的文章
    node.js+react写的一个登录注册 demo测试
    查看>>
    Node.js中环境变量process.env详解
    查看>>
    Node.js之async_hooks
    查看>>
    Node.js初体验
    查看>>
    Node.js升级工具n
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>
    Node.js基于Express框架搭建一个简单的注册登录Web功能
    查看>>
    node.js学习之npm 入门 —8.《怎样创建,发布,升级你的npm,node模块》
    查看>>
    Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
    查看>>
    Node.js安装及环境配置之Windows篇
    查看>>
    Node.js安装和入门 - 2行代码让你能够启动一个Server
    查看>>
    node.js安装方法
    查看>>
    Node.js官网无法正常访问时安装NodeJS的方法
    查看>>
    node.js模块、包
    查看>>
    node.js的express框架用法(一)
    查看>>
    Node.js的交互式解释器(REPL)
    查看>>
    Node.js的循环与异步问题
    查看>>
    Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
    查看>>
    nodejs + socket.io 同时使用http 和 https
    查看>>