mysql体系架构

  • 客户端(java、php、python等)
  • mysql服务层(连接管理器、查询解析器、查询优化器、查询缓存)
  • mysql存储引擎(innodb、myisam等)

存储引擎针对表而言的,不针对库

mysql存储引擎

mysql存储引擎之MyISAM

5.5前默认的存储引擎、临时表(查询、排序时由查询优化器生成的表)、系统表

  • 特性:
  • 并发性与锁级别(表级锁),
  • 表损坏修复,检查check table tablename,修复repair table tablename

此外也可以通过myisamchk对表进行修复,但是必须注意的是使用该命令进行修复时需要将mysql服务停止后进行。否则有可能对数据表造成更大的损坏。

  • myisam支持全文索引
  • myisam表支持数据压缩,可以使用myisampack命令进行压缩,如:myasimpack -b -f tablename.MYI。对已经压缩后的表不能进行写操作,因此要慎重操作。
  • 限制:
  • 5.0前,单表文件最大支持4G。如存储大表需要修改MAX_Rows和AVG_ROW_LENGTH;5.0后默认支持256TB
  • 使用场景
  • 非事务型应用
  • 只读类应用
  • 空间类应用

mysql存储引擎之Innodb

MySQL5.5及以后版本默认存储引擎

  • Innodb使用表空间进行数据存储

由innodb_file_per_table参数的值进行控制,如果为ON,则独立表空间(tablename.ibd)。如果为OFF,则会存储到系统共享表空间ibdataX。

如何选择系统表空间和独立表空间

  • 系统表空间无法简单的收缩文件大小
  • 独立表空间可以通过optimize table命令收缩系统文件
  • 系统表空间会产生IO瓶颈
  • 独立表空间可以同时向多个文件刷新数据

建议对Innodb使用独立的表空间。5.6后已经是默认方式。

  • 如何将系统表空间转换为独立表空间
  • 1、使用mysqldump导出所有表数据
  • 2、停止Mysql服务,修改参数,并删除Innodb相关文件。如果是主从架构可以先处理从库再处理主库。
  • 3、重启Mysql服务,重建Innodb系统表空间
  • 4、重新导入数据
  • Innodb存储引擎的特性

Innodb数据字典信息

Innodb的特性

  • 事务性存储引擎
  • 完全支持事务的ACID特性,
  • Redo Log(重做日志,已提交事务,实现事务的持久性)和Undo Log(未提交事务进行回滚)
  • Innodb支持行级锁
  • 支持更多的写并发
  • 行级锁由存储引擎层实现的。
  • 什么是锁?
  • 管理资源的并发访问
  • 实现事务的隔离性
  • 锁的类型
  • 共享锁(读锁)
  • 独占锁(写锁),排他性
  • 锁的粒度

行级锁、页级锁、表级锁

  • 表级锁
  • 行级锁
  • 阻塞和死锁
  • 什么是阻塞,不同锁之间的兼容性,不同锁之间需要等待锁响应。
  • 什么是死锁,两个或两个以上,互相占用资源而互相等待。一般情况下系统会自动处理。
  • Innodb状态检查

shown engine innodb status

  • 使用场景
  • Innodb适用于大多数OLTP应用

mysql存储引擎之CSV

文件存储特点:csv文件作为存储引擎。数据以文件方式存储在文件中。

  • 特点
  • 以csv格式进行数据存储
  • 所有的列定义不能是NULL
  • 不支持索引(不适用于大表及在线系统)
  • 可以直接对数据文件进行编辑
  • 使用场景
  • 适用于数据交换的中间表

mysql存储引擎之Archive

  • 特点
  • 以zlib对表数据进行压缩,磁盘I/O更少
  • 存储在ARZ为后缀的文件中

存储特点:

  • 只支持insert和select操作,支持行级锁
  • 只允许在自增ID列上添加索引

使用场景

  • 日志和数据采集类应用

mysql存储引擎之Memory

  • 特点

也成为Heap存储引擎,所有数据保存在内存中。一旦mysql重启,则数据会丢失,表结构会保存。

  • 功能特点:
  • 支持hash索引(等值查询)和btree(范围查询)索引,默认为hash索引
  • 所有字段固定长度为char(10)
  • 不支持blog和text等大字段
  • 使用表级锁,因此性能也不一定会很高。
  • 表最大大小由参数max_heap_table_size参数决定
  • 容易混淆的概念
  • 临时表,系统使用的临时表;create temporary table建立的表。
  • 使用场景
  • 用于查找或映射表,如邮编和地区的对应表。
  • 保存数据的中间表
  • 混存周期性聚合数据的结果表

mysql存储引擎之Federated

  • 特点
  • 提供了远程访问mysql服务器上表的方法
  • 本地不存储数据,数据全部存储在远程服务器上
  • 本地会保存远程数据库表结构和远程连接的信息
  • 如何使用

由于可以通过其他方式替代,因而默认是禁止的。但可以在启动时通过federated参数

mysql://user_name[:password]@host_name[:port]/dbname/tablename

  • 使用场景
  • 偶尔的统计分析和手工查询

如何选择存储引擎

参考条件

  • 事务
  • 备份,热备
  • 崩溃恢复
  • 存储引擎的特性

尽量不要同时混合使用多种存储引擎

mysql性能优化学习笔记-存储引擎的更多相关文章

  1. mysql性能优化学习笔记

    mysql性能优化 硬件对数据库的影响 CPU资源和可用内存大小 服务器硬件对mysql性能的影响 我们的应用是CPU密集型? 我们的应用的并发量如何? 数量比频率更好 64位使用32位的服务器版本 ...

  2. mysql性能优化学习笔记-参数介绍及优化建议

    MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global ...

  3. mysql性能优化学习笔记(1)优化目的、方向及数据库准备

    前言: 最近参加面试,问到了很多关于mysql的优化方面的问题,回答的不是很好,也是因为原先做的项目流量不是很大,所以对mysql优化不是太了解,所以趁着周末,恶补一下. 本文来源于慕课网sqlerc ...

  4. mysql性能优化学习笔记(4)索引的优化

    一.选择合适的索引列     1.在where,group by,order by,on从句中出现的列     2.索引字段越小越好(因为数据库的存储单位是页,一页中能存下的数据越多越好 )      ...

  5. mysql性能优化学习笔记(2)如何发现有问题的sql

    一.使用mysql慢查询日志对有效率问题的sql进行监控      1)开启慢查询       show variables like ‘slow_query_log’;//查看是否开启慢查询日志   ...

  6. mysql性能优化学习笔记(6)数据库配置优化&硬件优化

    一.操作系统配置优化:          1. 网络方面,修改/etc/sysctl.conf文件,增加tcp支持的队列数,减少断开连接时,资源的回收.          2. 打开文件数的限制.修改 ...

  7. mysql性能优化学习笔记(5)数据库结构优化

    一.选择合适的数据类型    1.使用可存下数据的最小的数据类型    2.使用简单地数据类型,Int<varchar    3.尽可能使用not null定义字段    4.尽量少用text, ...

  8. mysql性能优化学习笔记(3)常见sql语句优化

    一.max()优化mysql> explain select max(payment_date) from payment;+----+-------------+---------+----- ...

  9. MySql(十一):MySQL性能调优——常用存储引擎优化

    一.前言 MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.本章将介绍最为常用的两种存储引擎进行针对性的优化建议. 二.MyISAM存储 ...

随机推荐

  1. (HBase) Error: JAVA_HOME is not set and Java could not be found

    请查看Linux系统环境变量 JAVA_HOME 是否设置.. 两种方法 env //查看全部系统变量 或者 echo $JAVA_HOME //查看JAVA_HOME变量值 如果没有设置则输出空 没 ...

  2. JDBC连接池

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/45/0C/wKiom1PjixLxfknCAAEbp-e9Bq ...

  3. Centos安装Kafka集群

    kafka是LinkedIn开发并开源的一个分布式MQ系统,现在是Apache的一个孵化项目.在它的主页描述kafka为一个高吞吐量的分布式(能 将消息分散到不同的节点上)MQ.在这片博文中,作者简单 ...

  4. 关于shell脚本时遇value too great for base (error token is "08")

    今天在书写一个定时cp脚本时遇到了一个问题,value too great for base (error token is "08") 在网上查看到原来是以0开头的数字 系统会默 ...

  5. 【Bootstrap】Bootstrap和Java分页-第二篇

    目录 关于此文 配置xml-pager.tld 分页控件-Pager 分页action集成类-BaseController 实例-Dao 实例-service 实例-action 实例-JSP 实例- ...

  6. iOS设置分割线从边框顶端开始

    好方法,本来是在xib里面设置自定义分割线位置,结果还是差15像素,该方法亲测好使. IOS8 设置TableView Separatorinset 分割线从边框顶端开始 (转) 在ios8上 [Ta ...

  7. JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

  8. PHP简单封装MysqlHelper类

    MysqlHelper.class.php 1: <?php 2:  3: /** 4: * Mysql数据帮助类 5: */ 6: class MysqlHelper 7: { 8: func ...

  9. 安装wampserver 2.5的时候出现丢失MSVCR100.dll的解决办法。

    转载地址:http://www.mafutian.net/127.html

  10. 第一天 django

    全栈增长工程师实战 http://growth-in-action.phodal.com/ 生成的代码和示例不一样,static 也要加上 from django.conf.urls import u ...