精华内容
下载资源
问答
  • Mysql引擎

    2018-06-26 17:10:19
    Mysql引擎其实最初版本的Mysql引擎并没有现在功能这么完善,包括事务等功能都是不完善的,但是有许多不同的引擎出来支持了这些需求一般的情况下 mysql 会默认提供多种存储引擎首先可以查看以下自己的数据库支持哪些...

    Mysql引擎

    其实最初版本的Mysql引擎并没有现在功能这么完善,包括事务等功能都是不完善的,但是有许多不同的引擎出来支持了这些需求

    一般的情况下 mysql 会默认提供多种存储引擎

    首先可以查看以下自己的数据库支持哪些引擎:  

    mysql> show engines;
    查看数据库支持引擎查看数据库支持引擎


    在这里我们可以看到哪个引擎是我们的默认引擎,我的是 MyISAM


    但是根据个人使用发现 MyISAM 是个不怎么好的引擎,因为它不支持事务,比如回滚等事务都是无法在这个数据库引擎上进行的

    要注意,数据库存储引擎是相对数据表而言的,每个数据表都有一个指定的存储引擎

    使用 sql 语句查看某张表的引擎 :  

    mysql> show create table 表名;
    查看数据表引擎查看数据表引擎



    这里可以看到我的这张表使用的引擎是 InnoDB

    InnoDB 是我个人比较喜欢使用也比较推荐使用的引擎

    它支持事务,相对不支持事务的数据库引擎来说性能当然会相对差一点点


    那么如何设置数据表引擎呢?

    1.创建数据表时可以指定引擎

    CREATE TABLE t_test(
    ...
    ...
    )ENGINE=INNODB DEFAULT CHARSET=utf8;
    #指定引擎和存储字符类型

    2.对已创建的数据表修改引擎

    ALTER TABLE table_name engine=innodb;

    但是如果我们不去指定或者修改引擎的话,每次创建表它都会默认使用数据库默认的引擎,一般是 MyISAM

    那我们每次都要指定 InnoDB 或者每次创建完表之后再去修改的话都会非常麻烦

    那么我们如何修改数据库的默认引擎?

    需要修改数据库的配置文件   my.ini 文件

    数据库配置文件数据库配置文件


    这个文件就在数据库安装目录下



    用 nodepad 或者 记事本打开这个配置文件,查找 default-storage-engine 项,这一项配置了默认的数据库引擎

    查找对应配置项查找对应配置项


    将这一选项修改为你想要修改的默认引擎

    比如我将它修改成 InnoDB

    default-storage-engine=INNODB


    注意:如果配置文件了有  skip-innodb 这一选项的话,要把它注释掉,因为它的意思是跳过 Innodb,如果这一配置存在的话是无法使用 innodb的

    保存关闭文件

    修改完毕之后,要重新启动 mysql 服务才能重新加载配置文件

    net stop mysql
    net start mysql

    重启完毕之后,我们查看以下 引擎表

    查看所有引擎查看所有引擎


    这里就已经可以看到默认的引擎是 InnoDB 了

    之后建立表不需要刻意指定,默认的引擎就是 InnoDB了

    展开全文
  • MySql引擎

    千次阅读 2018-07-27 10:43:28
    MySql服务层主要用于定义一些与存储引擎无关的东西,因为底层的存储引擎可能不同,所以不能依赖具体的存储引擎 存储引擎针对表而不是针对库,也就是一个数据库里的表存储引擎可以不同,但是这样不推荐。 ...

    这里写图片描述

    MySql服务层主要用于定义一些与存储引擎无关的东西,因为底层的存储引擎可能不同,所以不能依赖具体的存储引擎

    存储引擎针对表而不是针对库,也就是一个数据库里的表存储引擎可以不同,但是这样不推荐。

    //查看提供的存储引擎
    mysql> show engines;
    //查看默认存储引擎
    mysql> show variables like '%storage_engine%';
    
    +----------------------------------+--------+
    | Variable_name                    | Value  |
    +----------------------------------+--------+
    | default_storage_engine           | InnoDB |
    | default_tmp_storage_engine       | InnoDB |
    | disabled_storage_engines         |        |
    | internal_tmp_disk_storage_engine | InnoDB |
    +----------------------------------+--------+

    MyISAM

    MyISAM存储引擎表由MYD(数据文件)和MYI(索引文件)组成

    特性:

    1. 并发性和锁级别

    使用表级锁,也就是会对整张表进行加锁,进行读的时候加共享锁(S锁),进行写的时候加排他锁(X锁)
    S锁:又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
    X锁:又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

    2. 表损坏修复

    支持对由于任意意外关闭而损坏的表的检查和修复,非事务恢复,它不支持事务

     check table tablename   //检查
     repair table tablename  //修复

    命令演示
    3.支持索引类型

    支持全文索引-待补充

    4.支持数据压缩

    //为每一行进行压缩
    myisampack -b -f tablename//压缩
    //-b代表生成备份文件,-f为强制,因为此时数据较小,强制压缩

    压缩

    压缩后会生成备份文件,同时表为只读

    mysql> insert into myisam values(1,1);
    ERROR 1036 (HY000): Table 'myisam' is read only

    限制
    mysql版本小于5.0时默认表大小为4G,之后为256TB

    可在建表时指定 MAX_ROWS和AVG_ROW_LENGTH2个参数相乘为表能达到的最大大小

    使用场景
    非事务型应用
    只读类应用(可以对数据文件进行压缩)
    空间类应用(地理位置信息等,空间函数)


    Innodb

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

    Innodb使用表空间进行数据存储
    变量为 innodb_file_per_table
    参数为ON:使用独立表空间:tablename.ibd
    参数为OFF:使用系统表空间:ibdataX

    mysql> show variables like 'innodb_file_per_table';
    +-----------------------+-------+
    | Variable_name         | Value |
    +-----------------------+-------+
    | innodb_file_per_table | ON    |
    +-----------------------+-------+
    //创建一个表
    create table innodb(id int, value varchar(20)) engine='innodb';
    //查看存储方式
    2018/07/27  10:23             8,588 innodb.frm
    2018/07/27  10:23            98,304 innodb.ibd
    //变成off
    mysql> set global innodb_file_per_table=off;
    //重新创建一个表
    create table innodb2(id int, value varchar(20)) engine='innodb';
    //查看存储
    2018/07/27  10:23             8,588 innodb2.frm
    //ibdata在上层目录,共享,不在该数据库目录下

    5.5以及之前,默认为off
    比较

    系统表无法简单的收缩文件大小(在删除数据后,表文件大小不变,只是把表标志位改变,浪费空间,若要删除则必须到处数据,进行相应的删除,之后进行重建)
    独立表空间可以通过optimize table命令收缩系统文件,可以对单表进行操作
    系统表空间会产生IO瓶颈,因为所有表都向这一个文件写入数据,顺序进行,产生等待
    独立表空间可以同时向多个文件刷新数据

    特性
    1.Innodb是一种事务性存储引擎

    完全支持事务的ACID特性
    事务使用Redo Log(已经提交的事务) Undo Log(没有提交的事务)

    2.Innodb支持行级锁

    提高并发程度,由存储引擎层实现

    锁的粒度:行级,表级

    //innodb默认行级锁,我们来尝试加表级锁,写锁
    mysql> lock table innodb write;
    //使用另一个连接尝试读取,被阻塞
    mysql> select * from innodb;
    //解锁
    mysql> unlock tables;
    //解锁后另一个连接已经可以正常执行了
    
    //同样,我们可以加读锁
    mysql> lock table innodb read;
    //之后用另一个连接进行读取,是可以的
    mysql> select id from innodb;
    +------+
    | id   |
    +------+
    |    1 |
    |    2 |
    +------+
    //若尝试进行插入,则会被阻塞
    mysql> insert into innodb values(3,3);
    //加写锁也会被阻塞,但是可以加读锁
    

    Innodb状态检查

    mysql> show engine innodb status;

    CSV

    数据以文本方式存储在文件中
    .csv文件存储表内容
    .csm文件存储表的元数据如表的状态和数据量
    .frm文件存储表结构信息,不论哪种存储引擎都有这个文件

    特点
    1.以CSV格式进行数据存储
    2.所有列必须都是不能为NULL的
    3.不支持索引,不适合大表
    4.可以对数据文件直接编辑

    演示

    //csv不支持列为空
    mysql> create table csv (id int, v1 varchar(10),v2 varchar(10)) engine=csv;
    ERROR 1178 (42000): The storage engine for the table doesn't support nullable columns
    
    //正确创建
    mysql> create table csv (id int not null, v1 varchar(10) not null,v2 varchar(10) not null) engine=csv;
    
    //插入内容
    mysql> insert into csv values(1,1,1),(2,2,2);

    最终结果
    这里写图片描述
    我们把他编辑,增加一行
    额,文件是只读的,最好还是不要去编辑了

    //尝试去建立索引,提示最多0keys。。那就是不支持了
    mysql>  create index idx_id on csv(id);
    ERROR 1069 (42000): Too many keys specified; max 0 keys allowed

    适用场景
    适合作为数据交换的中间表,其他应用把电子表格生成为csv文件供数据库读取,或把数据写到csv供其它应用读取


    Archive

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

    只支持insert和select操作
    只支持在自增ID列上加索引

    //建表操作,key(id)表示建立索引
    mysql> create table archive (id int auto_increment not null, v1 varchar(10), key(id))engine=archive;
    //插入数据
    mysql> insert archive(v1) values(1),(2);
    //查询
    mysql> select * from archive;
    +----+------+
    | id | v1   |
    +----+------+
    |  1 | 1    |
    |  2 | 2    |
    +----+------+
    //更新操作,提示不支持该操作
    mysql> update archive set v1 = 2 where id = 1;
    ERROR 1031 (HY000): Table storage engine for 'archive' doesn't have this option
    //删除操作
    mysql> delete from archive where id = 1;
    ERROR 1031 (HY000): Table storage engine for 'archive' doesn't have this option
    //建立索引,出错,最多支持一个key,但是这个key必须是自增id
    mysql> create index idx_v1 on archive(v1);
    ERROR 1069 (42000): Too many keys specified; max 1 keys allowed

    使用场景
    日志和数据采集类应用


    Memory(HEAP)

    数据保存在内存中
    若数据库服务器重启,则数据丢失,但表结构不会丢失,因为表结构为frm文件,存在磁盘

    功能特点
    1.支持Hash索引和BTree索引,默认为Hash,innodb和myisam默认为BTree,不支持Hash
    2.所有字段都为固定长度,例:varchar(10) = char(10)
    3.不支持blob和text等大字段
    4.使用表级锁
    5.表的最大大小由max_heap_table_size决定,默认16M,对已经存在的表无效

    //尝试建立含有text字段的表,提示不支持
    mysql> create table memory(id int, v1 char(10), v2 varchar(10), v3 text)engine=memory;
    ERROR 1163 (42000): The used table type doesn't support BLOB/TEXT columns
    //删掉这个字段,重建
    mysql> create table memory(id int, v1 char(10), v2 varchar(10))engine=memory;
    

    使用场景
    1.用于查找或者是映射表,例如邮编和地区的对应表
    2.用于保存数据分析中产生的中间表
    3.用于缓存周期性聚合数据的结果表


    Federated

    提供了远程访问MySQL服务器上表的方法
    本地不存储数据,数据全部放到远程服务器上
    本地需要保存表结构和远程服务器的连接信息

    默认禁止,启动需要在启动时增加federated参数
    windows下,关闭mysql服务,在my.ini加上federated=1,打开mysql服务即可

    //创建远程数据库
    mysql> create database remote;
    mysql> use remote
    //创建表,默认使用innodb引擎,我是5.7版本
    mysql> create table remote_fed(id int, v1 varchar(10));
    //插入数据
    mysql> insert remote_fed values(1,1),(2,2),(3,3);
    //进行用户的授权
    mysql> grant all on remote.remote_fed to user@'127.0.0.1' identified by 'user';
    
    //创建本地数据库
    mysql> create database local;
    mysql> use local
    //创建本地表,同时要指定使用federated引擎,指定连接,参数为用户名,密码,远程库地址,数据库,表
    mysql> create table local_fed(id int, v1 varchar(10)) engine=federated connection='mysql://user:user@127.0.0.1:3306/remote/remote_fed';
    
    //进行查询,查询出的是远程库的数据
    mysql> select * from local_fed;
    +------+------+
    | id   | v1   |
    +------+------+
    |    1 | 1    |
    |    2 | 2    |
    |    3 | 3    |
    +------+------+
    //进行删除
    mysql> delete from local_fed where id = 1;
    mysql> use remote;
    Database changed
    
    //在远程库中进行查询,数据已经被删掉
    mysql> select * from remote_fed;
    +------+------+
    | id   | v1   |
    +------+------+
    |    2 | 2    |
    |    3 | 3    |
    +------+------+
    

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


    如何选择正确的存储引擎

    • 事务
    • 备份
    • 崩溃回复
    • 存储引擎的特有特性
    展开全文
  • mysql引擎

    千次阅读 2018-10-29 14:32:02
    数据库引擎是用于存储,处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 数据库应用项目是通过数据库引擎与数据库连接的。何为...

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

    数据库应用项目是通过数据库引擎与数据库连接的。何为数据库引擎呢?简而言之,数据库引擎就是驱动各种数据库的程序,它负责处理数据库相关工作的核心部份。同样的,数据库应用项目的操作指令,均会通过数据库引擎的处理作用到数据库上。

    数据库引擎在数据库中的作用和位置,如下图所示:

         

    innodb 引擎:

        Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,他的设计目标是处理大容量数据库系统,它本身其实就是基于mysql后台的完整数据库系统,mysql运行时innodb会在内存中建立缓冲池,用于缓冲数据和索引,但是该引擎不支持fulltext类型的索引,而且他没有保存表的行数,当select count(*) from table时需要扫描表。当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用innodb引擎会提升效率,但是使用行级锁也不是绝对的,如果在执行一个sql语句时mysql不能确定扫描的范围,innodb同样会锁全表。

     

    MyISAM引擎:

       MyISAM是mysql默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时及写操作需要锁定整个表,效率便会低一些。不过和Innodb不同,MyISAM中存储了表的行数,当select count(*) from table时只需要直接读取已经保存好的值,而不需要进行全表扫描。如果表的读操作,远远多于写操作且不需要事务的支持,那么MyISAM也是很好的选择。

    两种引擎的选择:

        大尺寸的数据集趋向于InnoDB引擎,因为它支持事务处理和故障恢复。数据库的大小决定了故障恢复的时间长短,InnoDB可以利用事务日志进行数据恢复,这会比较快。

    两者的不同:

       1,InnoDB不支持FULLTEXT类型的索引。

       2,InnoDB中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算多少行,但是MyISAM只要简单的读取保存好的行数即可,注意的是,当 count()语句包含where条件时,两种表的操纵是一样的。

       3,对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。

       4,DELETE FROM TABLE时,InnoDB不会重新建立表,而是一行一行的删除。

       5,LOAD TABLE FROM MASTER 操作对InnoDB是不起作用的,解决办法是首先把InnoDB表改成MyISAM表,倒入数据后,在改成InnoDB表,但是对于使用过的额外的InnoDB特性(例如外键)的表不适用。

       两种类型最主要的差别就是InnoDB支持事务处理与外键和行级锁,而MyISAM不支持,所以MyISAM往往就容易被人认为只适合在小项目中使用。

     

     

        

    展开全文
  • MySQL引擎

    2017-12-04 10:18:06
    MySQL是我们比较常用的一种数据库软件。它有着诸多的优点,如开源的,免费的等等。... 所谓知己知彼方可百战不殆,要想将它们发挥到极致,首先我们应该来认识一下MySQL提供给我们的这几种引擎。  
         MySQL是我们比较常用的一种数据库软件。它有着诸多的优点,如开源的,免费的等等。其实它还有一个很好的特点,那就是有多种引擎可以供你选择。如果赛车手能根据不同的路况,地形随手更换与之最适宜的引擎,那么他们将创造奇迹。然而目前他们还做不到那样便捷的更换引擎,但是我们却可以!
         所谓知己知彼方可百战不殆,要想将它们发挥到极致,首先我们应该来认识一下MySQL提供给我们的这几种引擎。
         一般来说,MySQL有以下几种引擎:ISAM、MyISAM、HEAP、InnoDB和Berkley(BDB)。注意:不同的版本支持的引擎是有差异的。当然啦,如果你感觉自己的确技术高超,你还能够使用MySQL++来创建自己的数据库引擎,这个已经out of my knowledge,牛人可以参照MySQL++ API帮助来实现。下面逐一叙述这5种引擎各自的特性:

    ISAM

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

    MyISAM

    MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作。其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMChk工具和用来恢复浪费空间的MyISAMPack工具。

    MyISAM强调了快速读取操作,这可能就是为什么MySQL受到了Web开发如此青睐的主要原因:在Web开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和Internet平台提供商(Internet Presence Provider,IPP)只允许使用MyISAM格式。

    HEAP

    HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MyISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。让我再重复一遍:在你用完表格之后,不要忘记删除表格。

    InnoDB和Berkley DB

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

    认识完了这么多的引擎,我们也知道了它们应该在什么情况下拿来应急,那么接着我们就要学会如何来更换这些引擎了。

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

    Per Table:除了全局的方法外,还有一种更灵活的配置方法,那就是按表来设置引擎,这样我们就可以把那些需要用到事务处理的表设置成InnoDB,其他设置成MyISAM,将性能提升到极致,这是不是很令人兴奋呢?设置方法也比较简单:

    1、你可以在Create Table语句的最后添加扩展语句,如TYPE=MyISAM(或者ENGINE = INNODB)来指定当前标的引擎类型。也可以用Alter语句在建立表个后进行更改。当你不清楚当前数据库中各表的引擎时可以使用SHOW TABLE STATUS FROM DBname来查看。

    2、使用随MySQL服务器发布同时提供的MySQL客户端来创建表,在创建时可以选择使用的存储引擎。

    不同的引擎选择在不同的业务处理上,性能将有天壤之别!!

    题外话:

    要想服务器性能达到最佳,在配置服务器时也需要好好考虑。如果是在Win下那么可以通过运行MySQL Server Instance Configuration Wizard来设置,它将引导你设置当前服务器的类型等等信息。

    还有再有大量数据需要插入的时候可以考虑使用INSERT DELAYED语句(具体语法参考MySQL手册)。当一个客户端使用INSERT DELAYED时,会立刻从服务器处得到一个确定。并且行被排入队列,当表没有被其它线程使用时,此行被插入。使用INSERT DELAYED的另一个重要的好处是,来自许多客户端的插入被集中在一起,并被编写入一个块。这比执行许多独立的插入要快很多。当然它也有其适用范围,具体参考手册,我就不再赘述了。

     

     

     

    一、数据引擎简介

    MySQL 5.1中,MySQL AB引入了新的插件式存储引擎体系结构,允许将存储引擎加载到正在运新的MySQL服务器中。

    使用MySQL插件式存储引擎体系结构,允许数据库专业人员为特定的应用需求选择专门的存储引擎,完全不需要管理任何特殊的应用编码要求。采用MySQL服务器体系结构,由于在存储级别上提供了一致和简单的应用模型和API,应用程序编程人员和DBA可不再考虑所有的底层实施细节。因此,尽管不同的存储引擎具有不同的能力,应用程序是与之分离的。

    MySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:

    ·        MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另外一个引擎。

    ·        MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表,这两个引擎也都被默认包含在MySQL中。

    注释:MEMORY存储引擎正式地被确定为HEAP引擎。

    ·        InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。InnoDB也默认被包括在所有MySQL 5.1二进制分发版里,你可以按照喜好通过配置MySQL来允许或禁止任一引擎。

    ·        EXAMPLE存储引擎是一个“存根”引擎,它不做什么。你可以用这个引擎创建表,但没有数据被存储于其中或从其中检索。这个引擎的目的是服务,在MySQL源代码中的一个例子,它演示说明如何开始编写新存储引擎。同样,它的主要兴趣是对开发者。

    ·        NDB Cluster是被MySQL Cluster用来实现分割到多台计算机上的表的存储引擎。它在MySQL-Max 5.1二进制分发版里提供。这个存储引擎当前只被Linux, Solaris, 和Mac OS X 支持。在未来的MySQL分发版中,我们想要添加其它平台对这个引擎的支持,包括Windows。

    ·        ARCHIVE存储引擎被用来无索引地,非常小地覆盖存储的大量数据。

    ·        CSV存储引擎把数据以逗号分隔的格式存储在文本文件中。

    ·        BLACKHOLE存储引擎接受但不存储数据,并且检索总是返回一个空集。

    ·        FEDERATED存储引擎把数据存在远程数据库中。在MySQL 5.1中,它只和MySQL一起工作,使用MySQL C Client API。在未来的分发版中,我们想要让它使用其它驱动器或客户端连接方法连接到另外的数据源。

    插件式存储引擎体系结构提供了标准的管理和支持服务集合,它们对所有的基本存储引擎来说是共同的。存储引擎本身是数据库服务器的组件,负责对在物理服务器层面上维护的基本数据进行实际操作。

    这是一种高效的模块化体系结构,它为那些希望专注于特定应用需求的人员提供了巨大的便利和益处,这类特殊应用需求包括数据仓储、事务处理、高可用性情形等,同时还能利用独立于任何存储引擎的一组接口和服务。

    应用程序编程人员和DBA通过位于存储引擎之上的连接器API和服务层来处理MySQL数据库。如果应用程序的变化需要改变底层存储引擎,或需要增加1个或多个额外的存储引擎以支持新的需求,不需要进行大的编码或进程更改就能实现这类要求。MySQL服务器体系结构提供了一致和易于使用的API,这类API适用于多种存储引擎,通过该方式,该结构将应用程序与存储引擎的底层复杂性隔离开来。

    在下图中,以图形方式介绍了MySQL插件式存储引擎体系结构:
     
    The MySQL pluggable storage enginearchitecture
     

    二、选择存储引擎

    与MySQL一起提供的各种存储引擎在设计时考虑了不同的使用情况。为了更有效地使用插件式存储体系结构,最好了解各种存储引擎的优点和缺点。

    在下面的表格中,概要介绍了与MySQL一起提供的存储引擎:

    Storage engine comparison

    下述存储引擎是最常用的:

    ·        MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。

    ·        InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。

    ·        BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。

    ·        Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。

    ·        Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。

    ·        Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。

    ·        Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。

    ·        Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。

    ·        Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。

    请记住,对于整个服务器或方案,你并不一定要使用相同的存储引擎,你可以为方案中的每个表使用不同的存储引擎,这点很重要。

    三、将存储引擎指定给表

    可以在创建新表时指定存储引擎,或通过使用ALTER TABLE语句指定存储引擎。

    要想在创建表时指定存储引擎,可使用ENGINE参数:

    CREATE TABLE engineTest(
    id INT
    ) ENGINE = MyISAM;
     
    也可以使用TYPE选项到CREATE TABLE语句来告诉MySQL你要创建什么类型的表。
     
    CREATE TABLE engineTest(
    id INT
    ) TYPE = MyISAM; 
     
    虽然TYPE仍然在MySQL 5.1中被支持,现在ENGINE是首选的术语。 
     
    如果你省略掉ENGINE或TYPE选项,默认的存储引擎被使用。一般的默认是MyISAM,但你可以用--default-storage-engine或--default-table-type服务器启动选项来改变它,或者通过设置storage_engine或table_type系统变量来改变。

    要想更改已有表的存储引擎,可使用ALTER TABLE语句:

    ALTER TABLEengineTestENGINE =ARCHIVE;
    ALTER TABLE t ENGINE = MYISAM;
    ALTER TABLE t TYPE = BDB;
     
    如果你试着使用一个未被编译进MySQL的存储引擎,或者试着用一个被编译进MySQL但没有被激活的存储引擎,MySQL取而代之地创建一个MyISAM类型的表。当你在支持不同存储引擎的MySQL服务器之间拷贝表的时候,上述的行为是很方便的。(例如,在一个复制建立中,可能你的主服务器为增加安全而支持事务存储引擎,但从服务器为更快的速度而仅使用非事务存储引擎。)
     
    在不可用的类型被指定时,自动用MyISAM表来替代,这会对MySQL的新用户造成混淆。无论何时一个表被自动改变之时,产生一个警告。
     
    MySQL总是创建一个.frm文件来保持表和列的定义。表的索引和数据可能被存储在一个或多个文件里,这取决于表的类型。服务器在存储引擎级别之上创建.frm文件。单独的存储引擎创建任何需要用来管理表的额外文件。
     
    一个数据库可以包含不同类型的表。
     
    四、存储引擎和事务
     
    下述存储引擎支持事务:

    ·        InnoDB:通过MVCC支持事务,允许COMMIT、ROLLBACK和保存点。

    ·        NDB:通过MVCC支持事务,允许COMMIT和ROLLBACK。

    ·        BDB:支持事务,允许COMMIT和ROLLBACK。

    事务安全表(TST) 比起非事务安全表 (NTST)有几大优势:

    ·        更安全。即使MySQL崩溃或遇到硬件问题,要么自动恢复,要么从备份加事务日志恢复,你可以取回数据。

    ·        你可以合并许多语句,并用COMMIT语句同时接受它们全部(如果autocommit被禁止掉)。

    ·        你可以执行ROLLBACK来忽略你的改变(如果autocommit被禁止掉)。

    ·        如果更新失败,你的所有改变都变回原来。(用非事务安全表,所有发生的改变都是永久的)。

    ·        事务安全存储引擎可以给那些当前用读得到许多更新的表提供更好的部署。

    非事务安全表自身有几个优点,因为没有事务开支,所有优点都能出现:

    ·        更快

    ·        需要更少的磁盘空间

    ·        执行更新需要更少的内存

    你可以在同一个语句中合并事务安全和非事务安全表来获得两者最好的情况。尽管如此,在autocommit被禁止掉的事务里,变换到非事务安全表依旧即时提交,并且不会被回滚。

    虽然MySQL支持数个事务安全存储引擎,为获得最好结果,你不应该在一个事务那混合不同表类型。如果你混合表类型会发生问题,

    五、插入搜索引擎

    能够使用存储引擎之前,必须使用INSTALL PLUGIN语句将存储引擎plugin(插件)装载到mysql。例如,要想加载example引擎,首先应加载ha_example.so模块:

    INSTALL PLUGINha_exampleSONAME 'ha_example.so';

    文件.so必须位于MySQL服务器库目录下(典型情况下是installdir/lib)。

    六、拔出存储引擎

    要想拔出存储引擎,可使用UNINSTALL PLUGIN语句:

    UNINSTALL PLUGINha_example;

    如果拔出了正被已有表使用的存储引擎,这些表将成为不可访问的。拔出存储引擎之前,请确保没有任何表使用该存储引擎。

    为了安装插件式存储引擎,plugin文件必须位于恰当的MySQL库目录下,而且发出INSTALL PLUGIN语句的用户必须具有SUPER权限。

     

    创建table时可以通过engine关键字指定使用的存储引擎,如果省略则使用系统默认的存储引擎:

    CREATE TABLE t (i INT) ENGINE = MYISAM;

    查看系统中支持的存储引擎类型:

    mysql> show engines;

    标准安装程序中只提供部分引擎的支持,如果需要使用其他的存储引擎,需要使用源代码加不同的参数重新编译。其中DEFAULT表明系统的默认存储引擎,可以通过修改配置参数来变更:

    default-storage-engine=MyISAM

    查看某个存储引擎的具体信息

    mysql> show engine InnoDB status/G;
    展开全文
  • MySQl引擎

    千次阅读 2013-10-15 10:51:08
    MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用...
  • ClickHouse MySQL引擎

    2020-11-05 11:23:59
    ClickHouse关于mysql有库引擎跟表引擎. 1 mysql库引擎 直接映射mysql的数据库 CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] ...创建MySQL引擎数据库 create database mysqlDB engine = MySQL('nod
  • 20.MySQL引擎 20.1.MySQL引擎 20.2.MySQL和ClickHouse中数据类型的对应关系 20.3.示例 20.MySQL引擎 20.1.MySQL引擎 MySQL引擎可实现对MySQL数据库的表执行插入和查询操作。 ClickHouse表结构可以不同于原始的MySQL...
  • 查看Mysql引擎

    千次阅读 2019-09-24 10:01:05
    Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB 查看默认存储引擎 查看当前mysql默认引擎:show variables like '%engine%'; mysql> show variables like '%engine%'; 如何查看MySQL的...
  • Mysql引擎区别

    千次阅读 2019-05-09 10:54:45
    MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。...
  • 聊聊哪些mysql引擎和索引的那些事

    千次阅读 2021-01-18 16:41:34
    聊聊哪些mysql引擎和索引的那些事 一、MySQL架构及引擎 1.1 mysql架构 MySQL的架构跟我们javaweb开发是非常类似的,前排发送一个请求到controller->service->dao,在由dao去访问数据库,这就是web开发的三层...
  • MySQL数据库优化(一)——MySQL引擎

    千次阅读 2016-06-07 15:04:49
    一、MySQL引擎种类 (一)、InnoDB 1、InnoDB简介  InnoDB是my默认引擎,支持事务,in的数据存储在表空间(tablespace)中,通过间隙锁(next-key locking)防止幻读。 2、InnoDB特点  (1)In内部做了很多优化...
  • 查看mysql引擎

    2014-03-21 21:12:02
    一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看:看你的mysql现在已提供什么存储引擎:mysql> show engines;看你的mysql当前默认的存储引擎:mysql> show variables like '%storage_engine%';你要看...
  • mysql 引擎优化

    2013-04-07 22:09:43
    MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用...
  • MySQL 引擎 概述

    千次阅读 2011-12-03 00:58:06
    引擎说明 MySQL supportsseveral storage engines that act as handlers for different table types. MySQLstorage engines include both those that handle transaction-safe tables and thosethat handle ...
  • Java面试--Mysql引擎

    千次阅读 2018-08-08 17:59:30
    面试题:MySQL引擎讲一下,有什么区别,使用场景呢(百度、阿里、顺丰面试题) 一、MyISAM引擎 MyIASM是MySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或...
  • MySQL引擎简介

    千次阅读 2008-12-28 12:00:00
    MySQL是我们比较常用的一种数据库软件。它有着诸多的优点,如开源的,免费的等等。其实它还有一个很好的特点... 所谓知己知彼方可百战不殆,要想将它们发挥到极致,首先我们应该来认识一下MySQL提供给我们的这几种引擎
  • 【整理】MySQL引擎

    2013-04-07 22:39:47
    MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用...
  • 【整理】MySQL引擎问题总结

    千次阅读 2016-12-27 09:40:26
    MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用...
  • MySQL引擎——TokuDB与RocksDB

    千次阅读 2020-12-13 23:24:09
    文章目录一、环境部署1.1 OS配置1.1.1 关闭防火墙1.1.2 关闭selinux1.1.3 关闭大页1.2 数据库部署1.3 启用tokudb和rocksdb二、引擎对比2.1 TokuDB2.2 RocksDB 一、环境部署 1.1 OS配置 1.1.1 关闭防火墙 systemctl ...
  • 主要是MyISAM和InnoDB两个引擎,主要的区别如下 1、innodb 支持事务,这一点非常重要,事务是一种高级的处理方式,如果在一些增删中如果那个出错可以换源回滚,myisam不...4、mysql中默认的mysiam引擎,如如果要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,260
精华内容 22,504
关键字:

mysql引擎

mysql 订阅