《高性能Mysql》学习笔记(一)(下)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 《高性能Mysql》学习笔记(一)(下)

mysql 存储引擎



  • 建表时候,会在mytable.frm 中定义表定义。
  • 表的定义是在服务层
  • 不同系统存储形式不一样(数据和索引)。

使用show table status命令 显示表的相关信息,例如 show table status like 'user' \G,mysql5.1中的innodb plugin 支持一些新特性(BLOB存储方式使用),mysql5.1一定要使用 innodb plugin ,比 旧innodb要好得多

mysql 5.5 之后 innodb plugin 才替换掉旧的 Innodb


Innodb 概览


mysql4.1 之后新特性


  • innodb 可以将每个表的数据和索引放在单独文件当中
  • innodb 可以将裸设备作为存储介质


Innodb 特点


  • 使用mvcc 支持高并发
  • 实现了四个标准隔离级别(默认级别为 REPEATABLE READ(可重复读))。
  • 使用间隙锁(next-key locking) 策略防止幻读的出现。
  • 间隙锁不仅锁定查询行,还对索引进行锁定。
  • INNODB 基于 聚簇索引 建立。
  • 存储格式是平台独立的,意味着可以跨平台使用。
  • 内部进行优化,可预测性预读,可以自动在内存当中创建hash索引加速读操作自适应哈希索引,加速操作的加入缓冲区。
  • 阅读官方文档"InnoDB 事务模型和锁"了解更多内容。
  • innodb 通过一些机制和工具实现真正的热备份

聚簇索引 对于主键查询有非常高的性能,不过二级索引中必须包含主键列,如果主键列很大,其他所有索引都会很大


Myisam 存储引擎



mysql5.1 之前默认使用 MyISAM 作为存储引擎


特点:


  • 全文索引,压缩,空间函数
  • 不支持事务和行级锁
  • 崩溃之后无法安全恢复


存储:


将表存储在两个文件当中

  • 数据文件 ( .MYD )
  • 索引文件 ( .MYI )
  • 表支持包含动态或者静态(长度固定)行,mysql根据表定义决定存储形式
  • Mysql5 当中,如果是变长行,只能处理256TB 数据
  • 修改Myisam 表指针长度, 修改表 max_rowsavg_row_length 选项实现


myisam特性


  • 加锁与并发:对整张表加锁,而不是针对行。
  • myisam 表, mysql 可以手工或者自动检查和修复操作(但是效率较低)。
  • 索引特性:即使是BLOB 和 TEXT等长字段,也可以基于500 个字符创建。
  • myisam 支持全文索引,基于分词创建索引。
  • 延迟更新索引键。


myisam 压缩表


如果表中数据不再修改,可以使用myisam 压缩表,作用是减少磁盘i/o, 提高查询性能。


myisam 性能问题


最典型的性能问题是 表锁 的问题


mysql 内建其他存储引擎



Archive 引擎


  1. 只支持 insert 和 sleect, mysql5.1 之前不支持索引。
  2. 适合日志和数据采集类应用。
  3. 支持行级锁和专用缓冲区,实现高并发插入。
  4. 不是事务性引擎,只对告诉插入和压缩做了优化的简单引擎。


Blackhole 引擎


  1. 无存储,丢弃所有插入数据。但是服务器会记录blackhole 表的日志。
  2. 简单的日志引擎。


CVS 引擎


  1. 将普通cvs 作为mysql 表处理,不支持索引
  2. cvs 引擎可以作为 数据交换的机制(excel 表格的转换)。


Federated 引擎


  1. 访问其他mysql 服务器代理,但是默认是禁用的。


Memory引擎


  1. 可以快速访问数据 使用 Memory  表。
  2. 所有数据都是在内存当中。
  3. 每行长度固定。
  4. 并发性能较低。
  5. 作用:
  1. 查找或者映射表。
  2. 缓存周期性聚合数据。
  3. 保存数据产生的中间数据。
  1. 如果mysql 查询使用临时表保存结果,你们内部使用就是Memory 表,但是如果数据量较大,就会转为myisam 表


Merga 引擎


  1. myisam 引擎变种,多个myisam 表合并变种
  2. 分区功能实现后,被放弃
  3. NDB 集群引擎
  1. 用于mysql 集群


第三方存储引擎



OLTP 类引擎


  1. XtraDB引擎
  2. PBXT引擎
  3. TokuDB 引擎


如何选择引擎


除非使用到了innodb 不具备的特性,并且无法替代,否则优先选择innodb

主要看待四点

  1. 事务
  2. 备份
  3. 崩溃恢复
  4. 特有特性


个人看法:


  1. 对于极高的插入数据要求时候,可以使用myisam 或者archieve
  2. 如果不知道其他引擎的特性还是建议INNODB

测试崩溃数据恢复问题就是模拟电源断电!!!


数据表引擎转换



1. 直接转换


mysql> ALTER TABLE mytable ENGINE = InnoDB

这种方式性能很低,而且会加锁


2. 使用导入导出的方法


导入与导出:使用msyql 工具导出sql 语句然后手动修改引擎


3. 创建与查询


mysql > create table innodb_table like myisam table;
mysql > alter table innodb_table engine = InnoDB;
mysql > insert into innodb_table select * from myisam_table


4. 数据量很大的话可以分批处理


start transaction;
insert into innodb_table select * from myisam_table 
where id between x and y;
insert into innodb_table select * from myisam_table 
where id between x and y;
insert into innodb_table select * from myisam_table 
where id between x and y;
.......
commit


总结


第一篇读书笔记主要介绍了和MYSQL的存储引擎的重点内容,以及简单介绍MYSQL 的事务相关内容,在前言也说过,内容比较基础并且由于以前偷懒很多都是截图书上的内容=-=。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 关系型数据库 MySQL
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
49 0
|
3月前
|
关系型数据库 MySQL 数据库
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
49 0
|
7天前
|
存储 运维 关系型数据库
高性能 MySQL 第四版(GPT 重译)(四)(2)
高性能 MySQL 第四版(GPT 重译)(四)
41 4
|
7天前
|
存储 缓存 关系型数据库
高性能 MySQL 第四版(GPT 重译)(三)(1)
高性能 MySQL 第四版(GPT 重译)(三)
51 4
|
2月前
|
关系型数据库 MySQL
MySQL学习笔记
MySQL学习笔记
|
2月前
|
安全 关系型数据库 MySQL
某教程学习笔记(一):09、MYSQL数据库漏洞
某教程学习笔记(一):09、MYSQL数据库漏洞
17 0
|
2月前
|
存储 关系型数据库 MySQL
《高性能Mysql》学习笔记(二)
《高性能Mysql》学习笔记(二)
136 0
|
2月前
|
存储 SQL 关系型数据库
《高性能Mysql》学习笔记(一)
《高性能Mysql》学习笔记(一)
94 0
|
3月前
|
关系型数据库 MySQL Linux
Linux C/C++ 开发(学习笔记六):MySQL安装与远程连接
Linux C/C++ 开发(学习笔记六):MySQL安装与远程连接
46 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL8.0安装(win10) ---SQL学习笔记
MySQL8.0安装(win10) ---SQL学习笔记
40 0