复习使用 MySQL(二)

环境

  • MySQL 5.7.13

MySQL 主要存储引擎

特性/引擎 MyISAM Aria InnoDB XtraDB Memory Archive
数据存储 传统顺序数据储存 传统顺序数据储存 表空间存储方式 表空间存储方式
事务支持 不支持 支持 支持 支持 不支持 不支持
外键 不支持 不支持 支持 支持 不支持 不支持
全文检索 支持 支持 5.6 之后支持 5.6 之后支持
锁级别 表级锁 表级锁 行级锁 行级锁 表级锁 行级锁
Count 速度
适合业务 读多写少、单表数据量小于 1 KW 读多写少、单表数据量小于 1 KW 读写均衡、数据量不限 读写均衡、数据量不限
可用版本 MySQL、MariaDB、Percona MariaDB MySQL、MariaDB、Percona MariaDB、Percona
其他说明 传统顺序索引数据库,适合读多写少小数据量业务 MyISAM 增强版,性能更好 适合高压力高性能的业务模型 InnoDB 增强版

MySQL 索引定义

MySQL 的索引(Index)是帮助 MySQL 高效获取数据的数据结构

MySQL 索引类型

  • Normal
    • 普通索引,对存储的数值没有任何限制
  • Unique
    • 唯一索引,不允许数值重复,但允许空值
  • Primary
    • 主键索引,是一种特殊的唯一索引,不允许存在数值重复或空值
  • Spatial(R-Tree)
    • GIS 相关空间查询使用索引数据结构。
  • Fulltext
    • 主要用于全文检索,目前只有 MyISAM 和 MySQL 5.6 + 的 InnoDB 支持;目前只支持英文。

MySQL 索引方法

  • B+Tree
    • 可用于排序的索引数据结构,可应用于 =,>,< 等各个范围查询,并且可以排序
    • 时间复杂度:O(log2N)
  • Hash
    • 只能用于 =,IN 等操作,无法进行范围操作,Key 冲突严重情况下可能性能比 B-Tree 低下
    • 时间复杂度:O(1)

MyISAM 索引结构:B+ Tree

  • MyISAM 主索引和辅助索引
    • 区别在于:主索引 Key 是唯一;辅助索引 Key 可以重复
  • MyISAM 为非聚簇索引

InnoDB 索引结构:B+ Tree

  • InnoDB 主索引和辅助索引
    • InnoDB 的主索引是聚簇索引,数据和 Key 本身都会存储在 B+Tree 的叶子节点
    • InnoDB 的辅助索引本身主要是记录主索引的 Key,最终查找数据还是从辅助索引再去主索引查找
  • InnoDB 为聚簇索引

存储引擎及版本选择

结论:

  • 使用 InnoDB 于生产环境
  • 使用 MySQL 5.5+ 于生产环境

原因:

  • 更稳定可靠的数据存储和索引结构;整个存储引擎设计思想更可靠先进,接近于Oracle、SQL Server级别的数据库(有兴趣可以去阅读源码了解细节)
  • 更多可靠特性支持,比如事务、外键等支持(支付等关键领域事务非常重要)
  • 运行更稳定,不论读写数据的量级,都能够保证比较稳定的性能响应
  • 更好地崩溃恢复机制,特别利用一些Percona的一些工具,更有效运维InnoDB
  • MySQL 5.5+ 对比 MySQL 5.1.x 总体功能和性能提升太多,改进太多