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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 《高性能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 的事务相关内容,在前言也说过,内容比较基础并且由于以前偷懒很多都是截图书上的内容=-=。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
132 6
|
1月前
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
59 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
1月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
71 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
1月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
67 1
|
5月前
|
SQL Oracle 关系型数据库
MySQL学习笔记
MySQL学习笔记
39 0
|
3月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
58 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
3月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
139 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
3月前
|
SQL 关系型数据库 MySQL
MySQL学习笔记
这篇文章是一份关于MySQL数据库操作的学习笔记,涵盖了数据库的终端操作、数据类型、建表约束、事务处理以及SQL的连接查询等基础知识点。
|
3月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
39 6
|
3月前
|
存储 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
50 4

热门文章

最新文章

下一篇
无影云桌面