码迷,mamicode.com
首页 > 数据库 > 详细

mysql杂记

时间:2014-12-11 01:26:51      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:io   ar   使用   sp   文件   数据   log   bs   ad   

mysql5.5.8版本以前默认采用myisam存储引擎之后为innodb。存储引擎是基于表的。

mysql是单进程多线程模式运行,采用插件式表存储引擎,所以数据表都包含frm文件

mysql数据库执行步骤:客服端/服务器->通信协议 -> sql->查询缓存,存在返回,不存在->解析器解析,构建解析树->预处理器->解析树->查询优化器->查询执行计划->查询执行引擎->api接口调用相关存储引擎->数据,最后通过查询执行引擎返回结果并进入查询缓存中

innodb1.2.x增加了全文索引支持、一张表可以同时存在多个current_timestamp字段

innodb特点:线程主要包括:master(合并插入缓冲,日志缓冲刷新到磁盘,合并脏页到磁盘) thread I/O thread  purge thread(用来回收undo页) page cleaner thread (用来刷新脏页)

缓冲:重做日志缓存(redo log_buffer) 额外内存池 innodb_buffer_bool(数据页、索引页、插入缓冲、自适应哈希、锁信息、数据字典信息)

innodb内存缓冲采用lru算法,并且新读取的页插入到尾端37%的位置(可以参数控制)防止被某些sql刷新缓冲池,从而影响缓冲池效率

关键特性:插入缓冲(索引是辅助索引、索引不是唯一的)、两次写、自适应哈希、异步io、刷新临接页

mysql的binlog:1、statement记录的是逻辑sql语句 2、row记录表的行更改情况 3、mixed默认采用1格式有些情况会使用row格式

innodb的主键机制:每个表都会有主键 首先判断是否有唯一索引(找到其中的第一个作为主键)没有则自动创建一个6字节大小的指针

innodb char:0-255 表示字符长度,在多字符集条件下也是变长 varchar:0-65535 数据太多时采用blob存储

innodb索引:主键是聚集性索引,辅助索引远小于主键索引,选择辅助索引可以减少io次数 hash索引主要用于对缓冲池中的页进行hash并且采用链接解决冲突

innode锁:一致性非锁定读指innodb通过mvcc的方式,在读操作时会读取一个快照数据(通过undo实现)read commited在一个事务下总是读取最新的记录产生幻读现象 而repeatable read总是读取事务开始时的行数据避免幻读实现隔离性 innodb有3中锁算法:record lock单行锁 gap lock间隙锁 next-key lock包括 gap lock+record lock

innodb事务的实现:undo用来保证事务的一致性、隔离性 redo用来实现事务的原子性和持久性

myiasm与innodb的区别:个人小总结:1、结构上区别 2、事务处理 3、表的具体行数 4、锁

MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键。每张MyISAM表存放在三个文件中:frm 文件存放表格定义;数据文件是MYD (MYData);索引文件是MYI (MYIndex)。

InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作时的SQL语句),以及提供与Oracle类型一致的不加锁读取方式。InnoDB存储它的表和索引在一个表空间中,表空间可以包含数个文件。

主要区别:

  • MyISAM是非事务安全型的,而InnoDB是事务安全型的。
  • MyISAM锁的粒度是表级,而InnoDB支持行级锁定。
  • MyISAM支持全文类型索引,而InnoDB不支持全文索引。(mysql5.6以前)
  • MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
  • MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。
  • InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。

应用场景:

  • MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
  • InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

 

mysql杂记

标签:io   ar   使用   sp   文件   数据   log   bs   ad   

原文地址:http://www.cnblogs.com/hike2008/p/mysql.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!