mysql 数据库引擎

1、数据库引擎mysql

  数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而知足企业内大多数须要处理大量数据的应用程序的要求。 使用数据库引擎建立用于联机事务处理或联机分析处理数据的关系数据库。这包括建立用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。算法

2、数据库引擎任务sql

  在数据库引擎文档中,各主题的顺序遵循用于实现使用数据库引擎进行数据存储的系统的任务的主要顺序。数据库

  • 设计并建立数据库以保存系统所需的关系或XML文档
  • 实现系统以访问和更改数据库中存储的数据。包括实现网站或使用数据的应用程序,还包括生成使用SQL Server工具和实用工具以使用数据的过程。
  • 为单位或客户部署实现的系统
  • 提供平常管理支持以优化数据库的性能

3、MySQL数据库引擎类别安全

  你能用的数据库引擎取决于mysql在安装的时候是如何被编译的。要添加一个新的引擎,就必须从新编译MYSQL。在缺省状况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODBBERKLEY(BDB),也经常可使用。数据结构

ISAM

  ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。所以,ISAM执行读取操做的速度很快,并且不占用大量的内存和存储资源。ISAM的两个主要 不足之处在于,它 不支持事务处理,也 不可以容错:若是你的硬盘崩溃了,那么数据文件就没法恢复了。若是你正在把ISAM用在关键任务应用程序里,那就必须常常备份你全部的实时数据,经过其复制特性,MYSQL可以支持这样的备份应用程序。

MYISAM

  MYISAM是MYSQL的ISAM扩展格式和 缺省的数据库引擎。除了 提供ISAM里所没有的 索引和字段管理的功能,MYISAM还使用一种 表格锁定的机制,来 优化多个并发的读写操做。其代价是你须要常常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MYISAM还有一些有用的扩展,例如用来修复数据库文件的MYISAMCHK工具和用来恢复浪费空间的MYISAMPACK工具。
  MYISAM强调了快速读取操做,这可能就是为何MYSQL受到了WEB开发如此青睐的主要缘由:在WEB开发中你所进行的大量数据操做都是读取操做。因此,大多数虚拟主机提供商和INTERNET平台提供商只容许使用MYISAM格式。

HEAP

  HEAP 容许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快,可是它所 管理的数据是不稳定的,并且若是在关机以前没有进行保存,那么全部的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你须要使用SELECT表达式来选择和操控数据的时候很是有用。要记住,在用完表格以后就删除表格。

INNODB和BERKLEYDB

  INNODB和BERKLEYDB(BDB)数据库引擎都是造就MYSQL灵活性的技术的直接产品,这项技术就是MYSQL++ API。在使用MYSQL的时候,你所面对的每个挑战几乎都源于ISAM和MYISAM数据库引擎不支持事务处理也不支持外来键。尽管要比ISAM和MYISAM引擎慢不少,可是INNODB和BDB包括了 对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,若是你的设计须要这些特性中的一者或者二者,那你就要被迫使用后两个引擎中的一个了。

4、mysql数据引擎更换方式并发

一、查看当前数据库支持的引擎和默认的数据库引擎:工具

show engines;

  个人查询结果以下:性能

二、更改数据库引擎优化

2.一、更改方式1:修改配置文件my.ini

  将my-small.ini另存为my.ini,在[mysqld]后面添加default-storage-engine=InnoDB,重启服务,数据库默认的引擎修改成InnoDB

2.二、更改方式2:在建表的时候指定

     建表时指定:

create table mytbl(   
    id int primary key,   
    name varchar(50)   
)type=MyISAM;

2.三、更改方式3:建表后更改

  alter table mytbl2 type = InnoDB;

三、查看修改结果

  方式1:

show table status from mytest; 

  方式2:

show create table table_name

5、MyIASM 和 Innodb引擎详解

Innodb引擎

  Innodb引擎提供了对数据库ACID事务的支持,而且实现了SQL标准的四种隔离级别,关于数据库事务与其隔离级别的内容请见数据库事务与其隔离级别这篇文章。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它自己其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中创建缓冲池,用于缓冲数据和索引。可是该引擎不支持FULLTEXT类型的索引,并且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时须要扫描全表。当须要使用数据库事务时,该引擎固然是首选。因为锁的粒度更小,写操做不会锁定全表,因此在并发较高时,使用Innodb引擎会提高效率。可是使用行级锁也不是绝对的,若是在执行一个SQL语句时MySQL不能肯定要扫描的范围,InnoDB表一样会锁全表。

名词解析:

ACID

  • A  事务的原子性(Atomicity):指一个事务要么所有执行,要么不执行.也就是说一个事务不可能只执行了一半就中止了.好比你从取款机取钱,这个事务能够分红两个步骤:1划卡,2出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成.
  • C 事务的一致性(Consistency):指事务的运行并不改变数据库中数据的一致性.例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变.
  • I 独立性(Isolation):事务的独立性也有称做隔离性,是指两个以上的事务不会出现交错执行的状态.由于这样可能会致使数据不一致.
  • D 持久性(Durability):事务的持久性是指事务执行成功之后,该事务所对数据库所做的更改即是持久的保存在数据库之中,不会平白无故的回滚.

MyIASM引擎

  MyIASM是MySQL默认的引擎,可是它没有提供对数据库事务的支持,也不支持行级锁和外键,所以当INSERT(插入)或UPDATE(更新)数据时即写操做须要锁定整个表,效率便会低一些。不过和Innodb不一样,MyIASM中存储了表的行数,因而SELECT COUNT(*) FROM TABLE时只须要直接读取已经保存好的值而不须要进行全表扫描。若是表的读操做远远多于写操做且不须要数据库事务的支持,那么MyIASM也是很好的选择。

两种引擎的选择

  大尺寸的数据集趋向于选择InnoDB引擎,由于它支持事务处理和故障恢复。数据库的大小决定了故障恢复的时间长短,InnoDB能够利用事务日志进行数据恢复,这会比较快。主键查询在InnoDB引擎下也会至关快,不过须要注意的是若是主键太长也会致使性能问题,关于这个问题我会在下文中讲到。大批的INSERT语句(在每一个INSERT语句中写入多行,批量插入)在MyISAM下会快一些,可是UPDATE语句在InnoDB下则会更快一些,尤为是在并发量大的时候。

Index——索引

  索引(Index)是帮助MySQL高效获取数据的数据结构。MyIASM和Innodb都使用了树这种数据结构作为索引。下面我接着讲这两种引擎使用的索引结构,讲到这里,首先应该谈一下B-Tree和B+Tree。

MyIASM引擎的索引结构

  MyISAM引擎的索引结构为B+Tree,其中B+Tree的数据域存储的内容为实际数据的地址,也就是说它的索引和实际的数据是分开的,只不过是用索引指向了实际的数据,这种索引就是所谓的非汇集索引。以下图所示:

  这里设表一共有三列,假设咱们以Col1为主键,则上图是一个MyISAM表的主索引(Primary key)示意。能够看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是惟一的,而辅助索引的key能够重复。若是咱们在Col2上创建一个辅助索引,则此索引的结构以下图所示:

  一样也是一颗B+Tree,data域保存数据记录的地址。所以,MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,若是指定的Key存在,则取出其data域的值,而后以data域的值为地址,读取相应数据记录。

Innodb引擎的索引结构

  与MyISAM引擎的索引结构一样也是B+Tree,可是Innodb的索引文件自己就是数据文件,B+Tree的数据域存储的就是实际的数据,这种索引就是汇集索引。这个索引的key就是数据表的主键,所以InnoDB表数据文件自己就是主索引。

  而且和MyISAM不一样,InnoDB的辅助索引数据域存储的也是相应记录主键的值而不是地址,因此当以辅助索引查找时,会先根据辅助索引找到主键,再根据主键索引找到实际的数据。因此Innodb不建议使用过长的主键,不然会使辅助索引变得过大。建议使用自增的字段做为主键,这样B+Tree的每个结点都会被顺序的填满,而不会频繁的分裂调整,会有效的提高插入数据的效率。

二者区别:
  第一个重大区别是InnoDB的数据文件自己就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件自己就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,所以InnoDB表数据文件自己就是主索引。
  上图是InnoDB主索引(同时也是数据文件)的示意图,能够看到叶节点包含了完整的数据记录。这种索引叫作汇集索引。由于InnoDB的数据文件自己要按主键汇集,因此 InnoDB要求表必须有主键(MyISAM能够没有),若是没有显式指定,则MySQL系统会自动选择一个能够惟一标识数据记录的列做为主键,若是不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段做为主键,这个字段长度为6个字节,类型为长整形。
 
 
  第二个与MyISAM索引的不一样是InnoDB的辅助索引data域存储相应记录主键的值而不是地址。换句话说,InnoDB的全部辅助索引都引用主键做为data域。例如,下图为定义在Col3上的一个辅助索引:
  这里以英文字符的ASCII码做为比较准则。汇集索引这种实现方式使得按主键的搜索十分高效,可是辅助索引搜索须要检索两遍索引:首先检索辅助索引得到主键,而后用主键到主索引中检索得到记录。
 
  了解不一样存储引擎的索引实现方式对于正确使用和优化索引都很是有帮助,例如知道了InnoDB的索引实现后,就很容易明白为何不建议使用过长的字段做为主键,由于全部辅助索引都引用主索引,过长的主索引会令辅助索引变得过大。再例如,用非单调(多是指“非递增”的意思)的字段做为主键在InnoDB中不是个好主意,由于InnoDB数据文件自己是一颗B+Tree,非单调(多是指“非递增”的意思)的主键会形成在插入新记录时数据文件为了维持B+Tree的特性而频繁的分裂调整,十分低效,而使用自增字段做为主键则是一个很好的选择。

  致谢:感谢您的阅读!

相关文章
相关标签/搜索