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

    你可能感兴趣的文章
    Oracle 序列sequence 开始于某个值(10)执行完nextval 发现查出的值比10还小的解释
    查看>>
    ORACLE 异常错误处理
    查看>>
    oracle 执行一条查询语句,把数据加载到页面或者前台发生的事情
    查看>>
    oracle 批量生成建同义词语句和付权语句
    查看>>
    oracle 抓包工具,shell 安装oracle和pfring(抓包) 及自动环境配置
    查看>>
    Oracle 拆分以逗号分隔的字符串为多行数据
    查看>>
    Oracle 排序中使用nulls first 或者nulls last 语法
    查看>>
    oracle 插入date日期类型的数据、插入从表中查出的数据,使用表中的默认数据
    查看>>
    Oracle 操作笔记
    查看>>
    oracle 数据库 安装 和优化
    查看>>
    oracle 数据库dg搭建规范1
    查看>>
    Oracle 数据库常用SQL语句(1)
    查看>>
    Oracle 数据库特殊查询总结
    查看>>
    Oracle 数据类型
    查看>>
    Oracle 数据自动备份 通过EXP备份
    查看>>
    oracle 数据迁移 怎么保证 和原表的数据顺序一致_一个比传统数据库快 1001000 倍的数据库,来看一看?...
    查看>>
    oracle 时间函数
    查看>>
    oracle 时间转化函数及常见函数 .
    查看>>
    Oracle 权限(grant、revoke)
    查看>>
    oracle 查询clob
    查看>>