对于应用程序和用户来说,同样一张表的数据无论用什么引擎来存储,看到的数据都是一样的,只是不同的引擎在功能、占用空间大小、读取性能等方面可能有所差别。

mysql最常用的存储引擎为Innodb、MyISAM和全文索引

5.5.5以前默认存储引擎为MyISAM,5.5.5及之后默认存储引擎为Innodb

mysql> show engines \G查看当前数据库系统支持的引擎

mysql5.5支持事务的引擎:Innodb/ndb(集群的引擎)

对于MyISAM来说,每一个表对应于磁盘上的三个文件,这三个文件名称相同,扩展名不同。

.frm文件保存表的定义(是服务器而不是MyISAM引擎的一部分),.MYD保存表的数据,.MYI是表的索引文件(可参考mysql的系统库mysql下的文件)

特点:

1.不支持事务

2.表级锁定(更新时锁定整个表),锁定的成本小,但大大降低了并发性能

3.读写互相阻塞,不仅会在写入的时候阻塞读取,还会在读取的时候阻塞写入,但是读不会阻塞另外的读

4.只会缓存索引不能缓冲数据,可以通过key_buffer_size缓存索引,减少磁盘IO,但是只会缓存索引不会缓存数据

5.读取速度较快,占用资源相对少(功能相对弱,锁的粒度大)

6.不支持外键约束,但支持全文索引

7.mysql5.5.5默认的存储引擎

适用的生产场景:单一对数据库的操作(纯读或者纯写)可以使用

1.不需要事务支持的业务(例如转账、充值就不行)

2.一般为读多或者写多的网站应用,读写都频繁的场景不适合

3.读写并发相对较低的业务(纯读纯写高并发也可以)

4.数据修改相对较少的业务

5.以读为主的业务,例如www、blog、图片信息数据库

6.对数据一致性要求不很高的业务

7.硬件资源相对较差的机器

调优精要:

1.设置合适的索引

2.调整读写优先级,根据实际需要确保重要的操作更优先执行

3.启用延迟插入改善大批量写入性能(降低写入频率)

4.尽量顺序操作,让insert数据都写入到尾部,减少阻塞

5.分解大的时间长的操作,降低单个操作的阻塞时间

6.降低并发数,某些高并发场景通过应用进行排队队列机制

7.对于相对静态(更改不频繁)的数据库数据,充分利用query cache或者mamcached缓存服务极大的提高访问效率

8.count只有在全表扫描的时候高效,带有其他条件的count都需要进行实际的数据访问

9.可以把主从同步的主库使用Innodb,从库使用MyISAM引擎(不推荐)

Innodb

特点:

1.支持事务

2.行级锁定(更新时一般锁定当前行),通过索引实现,如果进行全表扫描仍然会锁全表与MyISAM相同,注意间隙锁的影响

3.读写阻塞与事务隔离级别相关

4.具有高效的缓存特性,能缓存索引,也能缓存数据

5.整个表和主键以cluster方式存储,组成一棵平衡树

6.所有secondary index都会保存逐渐信息

7.支持分区和表空间,类似oracle数据库

8.支持外键约束,5.5以前不支持全文索引,后续支持

9.与MyISAM相比对硬件资源要求相对较高

适用场景:

1.需要事务支持的业务

2.行级锁定对高并发有很好的适应能力,但需要确保查询通过索引完成

3.数据读写及更新都较为频繁的场景,如bbs、sns、微博、微信等

4.对数据一致性要求较高的业务,例如充值转账

5.硬件设备内存大,可以利用Innodb较好的缓存能力来提高内存利用率,尽可能减少磁盘IO

6.与MyISAM引擎相比,Innodb引擎更消耗资源,速度没有MyISAM快

调优精要:

1.主键尽可能小,避免给secondary index带来过大压力

2.避免全表扫描,否则会使用表锁

3.尽可能缓存所有的索引和数据,提高响应速度,减少磁盘IO消耗

4.在大批量小插入的时候,尽量自己控制事务,而不要使用autocommit

4.合理设置innodb_flush_log_at_trx_commit,不要过度追求安全性

5.避免主键更新,这会带来大量的数据移动

事务:逻辑上的一组sql语句操作,这组sql语句执行时要么全部成功要么全部失败

事务的四大特性ACID

原子性(atomicity):事务是一个不可分割的单位,一个事务中的所有sql操作要么全部成功要么全部失败

一致性(consistency):事务发生前和发生后,事务的完整性必须保持一致

隔离性(isolation):当并发访问数据库时,一个正在执行的事务在执行完毕前,对于其他会话是不可见的,多个并发事务之间的数据是互相隔离的(mysqldump时的参数--single-transaction)

持久性(durability):一个事务一旦被提交,它对数据库中的数据改变就是永久性的,如果出了错误,事务不允许撤销,只能通过“补偿性事务”

mysql数据库的事务默认是自动提交的。如果想多条sql在一个事务中执行,则需要使用事务进行处理。如果开启一个事务没有提交,mysql会自动回滚事务,或者手动使用rollback回滚。

start transaction开启事务

rollback回滚事务

commit提交事务

mysql> show variables like '%commit%';结果为on或者off(默认为on)

表创建后修改引擎的方法

1.mysql语句修改

mysql> alter table test2 engine=MyISAM;

2.使用sed对备份内容进行引擎替换,即用mysqldump备份,使用sed对引擎做替换,再导入替换后的备份语句

3.linux命令mysql_convert_table_format修改

转载于:https://www.cnblogs.com/Forever77/p/10051278.html

mysql引擎和事务相关推荐

  1. MySQL · 引擎特性 · InnoDB 事务子系统介绍

    前言 在前面几期关于InnoDB Redo和Undo实现的铺垫后,本节我们从上层的角度来阐述InnoDB的事务子系统是如何实现的,涉及的内容包括:InnoDB的事务相关模块,如何实现MVCC及ACID ...

  2. mysql 事务 引擎_mysql引擎和事务

    对于应用程序和用户来说,同样一张表的数据无论用什么引擎来存储,看到的数据都是一样的,只是不同的引擎在功能.占用空间大小.读取性能等方面可能有所差别. mysql最常用的存储引擎为Innodb.MyIS ...

  3. mysql索引与事务笔记_《MySQL技术内幕:InnoDB存储引擎》读书笔记五-锁、索引及事务...

    1.锁mysql 1)锁是数据库系统区别于文件系统的一个关键特性,数据库使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性.算法 2)每一种数据库实现锁的方式都不一样.sql 共享锁:容 ...

  4. 看完就懂——MySQL索引、事务与存储引擎

    目录 前言 一.索引(index) 1.1 索引的概念 1.2 索引的作用 1.3 索引的优缺点 1.4 索引的分类 1.5 创建索引的原则依据 1.6 创建索引 1.6.1 普通索引 1.6.2 唯 ...

  5. 互联网行业中最常用的数据库——MySQL 索引、事务与存储引擎

    MySQL 索引.事务与存储引擎 一.MySQL 索引 1.1 索引的概念 1.2 索引的作用及缺点 1.2.1 优点 1.2.2 缺点 1.3 创建索引的原则依据 1.4 索引的分类和创建 1.4. ...

  6. MySQL索引、事务与引擎基础详解,理论加实例

    目录 一.索引 1.1普通索引 1.2唯一性索引 1.3主键索引 1.4组合索引 1.5全文索引 1.6索引的查看 1.7索引的删除 二.事务 2.1事务的ACID特点 2.2事务控制语句 2.3事务 ...

  7. MySQL的存储引擎、事务和锁机制

    1.什么存储引擎 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧,锁定水平等功能,使用不同的存储引 ...

  8. MySQL 索引、事务与存储引擎

    目录 一.MySQL 索引 1.索引的概念 2.索引的作用 3.索引的副作用 4.创建索引的原则依据 5.索引的分类和创建 1.普通索引 2.唯一索引 3.主键索引 4.组合索引(单列索引与多列索引) ...

  9. MySQL · 引擎特性 · InnoDB 事务系统

    MySQL · 引擎特性 · InnoDB 事务系统 前言 关系型数据库的事务机制因其有原子性,一致性等优秀特性深受开发者喜爱,类似的思想已经被应用到很多其他系统上,例如文件系统等.本文主要介绍Inn ...

最新文章

  1. 参数匹配顺序——Python学习之参数(三)
  2. C# 中的char 和 byte
  3. 在领域驱动的设计,贫乏的领域模型,代码生成,依赖项注入等方面……
  4. 印象笔记打开错误_只会用手机自带便签?这三款笔记软件分分钟秒杀
  5. linux kprobe rootkit学习
  6. MFC 时间记时器, string 转化为CString
  7. word文字校对工具_如何在Word中使用校对面板
  8. P3853 路标设置
  9. 二十五.决策树之CART决策树的原理和sklearn实现
  10. python实现文本翻译
  11. 特殊字符保存到SQL数据库的问题
  12. Jenkins卸载方法
  13. Windows 搭建 Nexus3 私服
  14. I.MX8M mini物联网开发板框架及屏幕接口详解
  15. 计算机网络知识点全面总结(一篇全懂)
  16. Input上传多个文件
  17. 色深和色度采样,视频编解码
  18. 云里黑白21——win10 企业版更新系统后开始菜单左键点不出来
  19. sqlmap问题及解决办法
  20. 张家窝幼儿英语辅导班_英语启蒙的正确的打开方式

热门文章

  1. 小米 信号测试软件,iQOO和小米9信号之争:多方位网络测试,最终由谁胜出?
  2. git linux 部署网站,centos 搭建git自动部署web应用
  3. 20155229《网络对抗技术》Exp9:Web安全基础
  4. C++函数返回局部变量
  5. linux-基本开发环境搭建
  6. 大数据,并非一蹴而就
  7. php 魔术方法 多继承,PHP通过魔术方法实现多继承与重载
  8. 里面的自带的字典在哪里_影视剪辑高清素材哪里找?4种方法教你,适合新手入门...
  9. arcmap常见错误及常用操作(待补充)
  10. keras 微调整模型_如何围绕微服务调整团队