简单说,当你访问数据库时,不管是手工访问,还是程序访问,都不是直接读写数据库文件,而是通过数据库引擎去访问数据库文件。以关系型数据库为例,你发SQL语句给数据库引擎,数据库引擎解释SQL语句,提取出你需要的数据返回给你。因此,对访问者来说,数据库引擎就是SQL语句的解释器。

mysql的体系结构
mysql由 管理服务和工具组件、连接池组件、sql接口组建、查询分析器组件、优化器组件、缓存组件、插件式存储引擎、物理文件。

一、什么是存储引擎?
MySQL中的数据用各种不同的技术存储在文件(或者内存)中,这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的相关功能在MySQL中称为存储引擎(也称为表类型)。

MySql支持多个存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎:
  1、ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。

  2、MyISAM管理非事务表,是ISAM的扩展格式。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作。它提供高速存储和检索,以及全文搜索能力,受到web开发的青睐。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎。

  3、MEMORY存储引擎提供“内存中”表,被正式确定为HEAP引擎,也处理非事务表。HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MyISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。

  4、InnoDB和BDB(BerkleyDB)存储引擎提供事务安全表。尽管要比ISAM和MyISAM引擎慢很多,但是InnoDB和BDB包括了对事务处理和外键的支持,这两点都是前两个引擎所没有的。

  5、NDB Cluster是被MySQLCluster用来实现分割到多台计算机上的表的存储引擎,当前只被Linux, Solaris和Mac OS X支持。

二、如何更换引擎?
  1、Globle:一种最简单的方法就是更改服务器配置,直接将其设置成你所需要的引擎。这个在win下通过更改服务器安装目录下的mysql.ini或my.ini中的default-storage-engine项即可,也可以通过运行MySQL ServerInstance Configuration Wizard做简单的设置。

  2、PerTable:除了全局的方法外,还有一种更灵活的配置方法,那就是按表来设置引擎,这样我们就可以把那些需要用到事务处理的表设置成InnoDB,其他设置成MyISAM,将性能提升到极致,设置方法也比较简单:
  创建一个新表时,可以通过在CREATE语句中ENGINE或TYPE选项来告诉MySQL要创建什么类型的表:
  CREATE TABLE t (i INT) ENGINE = INNODB;
  CREATE TABLE t (i INT) TYPE = MEMORY;
  如果省略掉ENGINE或TYPE选项,默认的存储引擎被使用。当MySQL被用MySQL配置向导安装在Windows平台上,InnoDB存储引擎替代MyISAM存储引擎作为默认。当不可用的类型被指定时,自动用InnoDB表来替代。

  3、还可以把表从一个类型转到另一个类型,使用ALTERTABLE语句:
  ALTER TABLE t ENGINE = MYISAM;
  ALTER TABLE t TYPE = BDB;
  当不清楚当前数据库中各表的引擎时可以使用SHOW TABLE STATUS FROMDBname来查看。

三、如何选择存储引擎?
关于这个问题,我们需要考虑每个存储引擎提供了哪些不同的核心功能,一般把这些核心功能分为4类:支持的字段和数据类型、锁定类型、索引和事务处理。

1、支持的字段和数据类型
虽然所有这些引擎都支持通用的数据类型,例如整型、实型和字符型等,但是,并不是所有的引擎都支持其它的字段类型,特别是BLOG(二进制大对象)或者TEXT文本类型。

2、锁定类型
锁定机制主要是为了防止多个处理同时更新同一个数据。不同的存储引擎支持不同级别的锁定:表锁定、页锁定和行锁定。
  表锁定:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。支持最多的就是表锁定,MyISAM和MEMORY支持这种锁定。MySQL的表级锁有两种模式:表共享读锁和表独占写锁。对MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;对MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作;MyISAM表的读操作与写操作之间,以及写操作之间是串行的!
  行锁定:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。InnoDB表进行行级锁定。
  页锁定:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。BerkeleyDB引擎支持页锁定。

3、索引
建立索引在搜索和恢复数据库中的数据的时候能够显著提高性能。不同的存储引擎提供不同的制作索引的技术。有些存储引擎根本不支持索引。

4、事务处理
事务处理功能通过提供在向表中更新和插入信息期间的可靠性。

MySQL数据库引擎简介的更多相关文章

  1. 第 3 章 MySQL 存储引擎简介

    第 3 章 MySQL 存储引擎简介 前言 3.1 MySQL 存储引擎概述 MyISAM 存储引擎是 MySQL 默认的存储引擎,也是目前 MySQL 使用最为广泛的存储引擎之一.他的前身就是我们在 ...

  2. MySQL性能调优与架构设计——第3章 MySQL存储引擎简介

    第3章 MySQL存储引擎简介 3.1 MySQL 存储引擎概述 MyISAM存储引擎是MySQL默认的存储引擎,也是目前MySQL使用最为广泛的存储引擎之一.他的前身就是我们在MySQL发展历程中所 ...

  3. mysql 数据库引擎

    一.数据库引擎 数据库引擎是用于存储.处理和保护数据的核心服务.利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求. 使用数据库引擎创建用于联机事务处理或 ...

  4. MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

    本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下   数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  5. 常用mysql数据库引擎——MyISAM和InnoDB区别

    背景: 昨天做项目时,发现使用事务后回滚不了,后来把数据库引擎从MyISAM换成InnoDB后果断好了,如下图: 正文: MyISAM和InnoDB是mysql常用的数据库引擎,他们的区别如下: 数据 ...

  6. [转]MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

    本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下   数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  7. (转)MySQL数据库引擎ISAM MyISAM HEAP InnoDB的区别

    转自:http://blog.csdn.net/nightelve/article/details/16895917 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  8. MySQL数据库引擎介绍、区别

    数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另 ...

  9. MYSQL数据库引擎区别详解

    数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另 ...

随机推荐

  1. php RabbitMQ使用

    php RabbitMQ使用 参考网址: http://www.rabbitmq.com/tutorials/tutorial-three-php.html 最近研究rabbitmq队列,linux安 ...

  2. 转:autofac在mvc和webapi集成的做法

    本文转自:http://www.cnblogs.com/Hai--D/p/5992573.html var builder = new ContainerBuilder(); // Mvc Regis ...

  3. 如何理解python中的if __name__=='main'的作用

    一. 一个浅显易懂的比喻 我们在学习python编程时,不可避免的会遇到if __name__=='main'这样的语句,它到底有什么作用呢? <如何简单地理解Python中的if __name ...

  4. hzau 1204 Escape from the Darkness

    1204: Escape from the Darkness Time Limit: 1 Sec  Memory Limit: 1280 MBSubmit: 93  Solved: 3[Submit] ...

  5. Android自定义组件之ListView

    1-ListView简介 在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.一个ListView通常有两个职责. (1)将数据填充到 ...

  6. L121

    今天上午签字仪式的布置与该场合的严肃性非常协调.The setting for this morning's signing ceremony matched the solemnity of the ...

  7. 网络编程基础--协程--greenlet切换---gevent自动识别 IO ---

    协程: 1 单线程来实现并发---协程: 协程:是单线程下的并发,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程, 即协程是由用户程序自己控制调度的 只 ...

  8. UVALive - 4126 Password Suspects (AC自动机+状压dp)

    给你m个字符串,让你构造一个字符串,包含所有的m个子串,问有多少种构造方法.如果答案不超过42,则按字典序输出所有可行解. 由于m很小,所以可以考虑状压. 首先对全部m个子串构造出AC自动机,每个节点 ...

  9. 2017-2018-1 20179215 第十一周 ShellShock攻击实验

    <Linux内核原理与设计>第十一周作业 ShellShock攻击实验 分组:和20179205王雅哲共同完成实验及博客攥写 实验内容:  Bash中发现了一个严重漏洞shellshock ...

  10. python_广州房价热力图

    调用百度地图api,获取经纬度数据,然后在调用百度地图api,生成热力图 import pandas as pd import numpy as np data = pd.read_excel(r'D ...