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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 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 的事务相关内容,在前言也说过,内容比较基础并且由于以前偷懒很多都是截图书上的内容=-=。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
7月前
|
消息中间件 缓存 弹性计算
纯PHP+MySQL手搓高性能论坛系统!代码精简,拒绝臃肿
本内容分享了一套经实战验证的社交系统架构设计,支撑从1到100万用户的发展,并历经6次流量洪峰考验。架构涵盖客户端层(App、小程序、公众号)、接入层(API网关、负载均衡、CDN)、业务服务层(用户、内容、关系、消息等服务)、数据层(MySQL、Redis、MongoDB等)及运维监控层(日志、监控、告警)。核心设计包括数据库分库分表、多级缓存体系、消息队列削峰填谷、CQRS模式与热点数据动态缓存。同时提供应对流量洪峰的弹性伸缩方案及降级熔断机制,并通过Prometheus实现全链路监控。开源建议结构清晰,适合大型社交平台构建与优化。
305 11
|
2月前
|
SQL 关系型数据库 MySQL
索引设计实战:如何创建高性能MySQL索引
本文深入解析MySQL索引设计的核心原则与实战技巧,涵盖索引选择性、复合索引、性能优化及常见陷阱等内容,通过实际案例帮助开发者创建高效索引,显著提升数据库查询速度,助你打造高性能数据库系统。
|
6月前
|
存储 关系型数据库 MySQL
【免费动手教程上线】阿里云RDS MySQL推出大容量高性能存储:高性能本地盘(最高16TB存储空间)、高性能云盘(最高64TB存储空间)
阿里云RDS MySQL提供高性能本地盘与高性能云盘等存储方案,满足用户大容量、低延迟需求。高性能本地盘单盘最大16TB,IO延时微秒级;高性能云盘兼容ESSD特性,支持IO性能突发、BPE及16K原子写等能力。此外,阿里云还提供免费动手体验教程,帮助用户直观感受云数据库 RDS 存储性能表现。
|
10月前
|
存储 关系型数据库 MySQL
MySQL索引学习笔记
本文深入探讨了MySQL数据库中慢查询分析的关键概念和技术手段。
699 81
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
343 6
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
388 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
237 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
190 1
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
188 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)

推荐镜像

更多