mysql BDB存储引擎_MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)...

51cto/2023/10/1 2:46:15

MySQL中的存储引擎:

1、存储引擎的概念

2、查看MySQL所支持的存储引擎

3、MySQL中几种常用存储引擎的特点

4、存储引擎之间的相互转化

一、存储引擎:

1、存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。

2、MySQL中的数据用各种不同的技术存储在文件(或内存)中,这些技术中的每一种技术都使用不同的存储机制,索引技巧,锁定水平并且最终提供广泛的不同功能和能力。在MySQL中将这些不同的技术及配套的相关功能称为存储引擎。

二、MySQL 中查看引擎

1、show  engines;   // 查看mysql所支持的存储引擎,以及从中得到mysql默认的存储引擎。

2、show  variables  like '% storage_engine';    //    查看mysql 默认的存储引擎

e5fe26a5205cdaefc31086d103155cf3.png

3、show  create   table  tablename ;   //    查看具体某一个表所使用的存储引擎,这个默认存储引擎被修改了!

62c5f7e7a21910db7ad225cea78eaed3.png

4、show  table   status  from  database  where  name="tablename"

//准确查看某个数据库中的某一表所使用的存储引擎

d93a5627082c86afca0d1d98d293e424.png

三、MySQL中常用的几种存储引擎:innoDB、bdb、myisam、memory以及这几个引擎的讲解;

InnoDB存储引擎:

(1) innodb存储引擎该mysql表提供了事务,回滚以及系统崩溃修复能力和多版本迸发控制的事务的安全。

(2)innodb支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空的话怎会进行自动存现有的值开始增值,如果有但是比现在的还大,则就保存这个值。

(3)innodb存储引擎支持外键(foreign key) ,外键所在的表称为子表而所依赖的表称为父表。

(4)innodb存储引擎最重要的是支持事务,以及事务相关联功能。

(5)innodb存储引擎支持mvcc的行级锁。

MyISAM存储引擎:

1、MyISAM这种存储引擎不支持事务,不支持行级锁,只支持并发插入的表锁,主要用于高负载的select。

2、myisam类型的表支持三种不同的存储结构:静态型、动态型、压缩型。

(1)静态型:就是定义的表列的大小是固定(即不含有:xblob、xtext、varchar等长度可变的数据类型),这样mysql就会自动使用静态myisam格式。

使用静态格式的表的性能比较高,因为在维护和访问的时候以预定格式存储数据时需要的开销很低。但是这高性能是有空间换来的,因为在定义的时候是固定的,所以不管列中的值有多大,都会以最大值为准,占据了整个空间。

(2)动态型:如果列(即使只有一列)定义为动态的(xblob, xtext, varchar等数据类型),这时myisam就自动使用动态型,虽然动态型的表占用了比静态型表较少的空间,但带来了性能的降低,因为如果某个字段的内容发生改变则其位置很可能需要移动,这样就会导致碎片的产生。随着数据变化的怎多,碎片就会增加,数据访问性能就会相应的降低。

对于因为碎片的原因而降低数据访问性,有两种解决办法:

@1、尽可能使用静态数据类型

@2、经常使用optimize   table语句,他会整理表的碎片,恢复由于表的更新和删除导致的空间丢失。

(如果存储引擎不支持 optimize  table    则可以转储并重新加载数据,这样也可以减少碎片)

(3)压缩型:如果在这个数据库中创建的是在整个生命周期内只读的表,则这种情况就是用myisam的压缩型表来减少空间的占用。

MEMORY存储引擎:

(1)memory存储引擎相比前面的一些存储引擎,有点不一样,其使用存储在内从中的数据来创建表,而且所有的数据也都存储在内存中。

(2)每个基于memory存储引擎的表实际对应一个磁盘文件,该文件的文件名和表名是相同的,类型为.frm。该文件只存储表的结构,而其数据文件,都是存储在内存中,这样有利于对数据的快速处理,提高整个表的处理能力。

(3)memory存储引擎默认使用哈希(HASH)索引,其速度比使用B-+Tree型要快,如果读者希望使用B树型,则在创建的时候可以引用。

(4)memory存储引擎文件数据都存储在内存中,如果mysqld进程发生异常,重启或关闭机器这些数据都会消失。所以memory存储引擎中的表的生命周期很短,一般只使用一次。

BlackHole存储引擎:

(1)支持事务,而且支持mvcc的行级锁,主要用于日志记录或同步归档,这个存储引擎除非有特别目的,否则不适合使用!

四、各存储引擎相互转化:

1、alter  table  tablename  engine = Innodb /MyISAM/Memory    //       修改了这个表的存储引擎

优点:简单,而且适合所有的引擎。

缺点:

(1)、这种转化方式需要大量的时间 和I/O,mysql要执行从旧表 到新表的一行一行的复制所以效率比较低

(2)、在转化这期间源表加了读锁

(3)、从一种引擎到另一种引擎做表转化,所有属于原始引擎的专用特性都会丢失,比如从innodb到 myisam 则 innodb的索引会丢失!

2、使用dump(转储) import(导入)

优点:使用mysqldump这个工具将修改的数据导出后会以 .sql 的文件保存,你可以对这个文件进行操作,所以你有更多更好的控制, 如修改表名,修改存储引擎等!

看看导出的一个表:

9cba390b078f8459e8a3923fc629a7f6.png

03bb3aac09d879a05ef80623d58320c4.png

b48cceb8f1123e1fdcd676bc5ef951a5.png

以上就是使用mysqldump 导出来的表 即 一个 .sql 文件 你可以按照需求编写这个文件,在将这个文件导入就ok!

3、第一种方式简便,第二种方式安全,这第三种方式就算是前两种方式的折中吧,

create  select:

(1)、 create  table   newtable  like  oldtable;

(2)、alter  table  newtable engine= innodb/ myisam / memory

(3)、insert  into  newtable  select * from  oldtable;

如果数据量不大的话这种方式还是挺好的!

还有更高效的办法就是 增量填充,在填充完每个增量数据块之后提交一次事务,这样就不会导致撤销日志文件过大;

(1)start  transaction

(2)insert into newtable  select *  from oldtable  where  id(主键) between x and y;

(3) commit

这样等数据填充之后有了需要的新表,旧表也存在,不需要的haunt可以删除,很方便!

感谢原作者,转载来自:

http://blog.csdn.net/qh_java/article/details/14045827


http://www.ngui.cc/51cto/show-393.html

相关文章

嵌入式数据库 java_嵌入式数据库bdb(Berkeley DB Java Edition)

关于Berkeley数据库的介绍,可以参考下面的文章:使用Berkeley DB的一般步骤如下:第一,创建数据库环境Environment创建一个Environment环境,首先需要设置一个配置对象DatabaseConfig,用来配置一个数据库的环境…

error: rpmdb: BDB0113 Thread/process 21537/140635654248512 failed: BDB1507 Thread died in Berkeley D

【问题:yum安装软件 error: rpmdb: BDB0113 Thread/process 21537/140635654248512 failed: BDB1507 Thread died in Berkeley DB library】 【解决办法:重新构建rpm数据库】 //进入文件夹 /var/lib/rpm cd /var/lib/rpm //删除 -rf __db开头的文件 rm …

oracle rac 大表,oracle 11g RAC crfclust.bdb过大的处理

find / -type f -size 500M | xargs du -hm | sort -nrora.crf服务是为Cluster Health Monitor(以下简称CHM)提供服务的,用来自动收集操作系统的资源(CPU、内存、SWAP、进程、I/O以及网络等)的使用情况。由于bug 10165314,ora.crf服务生成的文件($GI_HO…

yum安装提示错误:rpmdb: BDB0113

目录问题解决方法问题 yum安装时,有如下提示 解决方法 重新构建rpm数据库 cd /var/lib/rpm ll rm -rf __db* rpm --rebuilddb

mysql engine 和type_MySQL engine/type类型InnoDB/MYISAM/MERGE/BDB/HEAP的区别

看MySQL参考手册 发现CREATE TABLE 时有多种数据库存储引擎:TYPE {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }网上查了下据说MyISAM、InnoDB两种引擎常用大至区别如下[不知是否准确]:高级处理:MyISAM类型不支持事务处理等高级处理&am…

人脸识别系统在校园的应用场景日益丰富

各类证件、门禁卡、钥匙曾经是高校师生出入校园的必备品,如今在越来越多的高校,师生们只需“刷脸”即可轻松自如享受各种服务。常见的有“刷脸”进校园、进图书馆、进寝室等。作为人工智能领域大规模落地的成熟技术,人脸识别已经被越来越多的…

普歌-Linux中yum update错误/yum install 错误 error: rpmdb: BDB0113 Thread/process 728/140414210832448 failed

【已解决】yum执行命令 error: rpmdb: BDB0113 Thread/process 728/140414210832448 failed 错误截图再现: 错误场景:可能是yum update xxx或yum install xxx 服务器版本:centos 7.x 解决方法 依次输入以下代码 # cd /var/lib/rpm # ls B…

yum报错-rpmdb: BDB0113

一、报错详情 yum包的时候出现报错 二、解决办法 # 进入到对应目录 cd /var/lib/rpm # 删除__db*文件 rm -f __db* 重构yum rpm --rebuilddb

mysql bdb_深入理解mysql之BDB系列(2)---数据元页结构(摘自老杨)

三:数据元页结构3.1 metepage头结构该结构是一个公共结构。用于B树matapage页、HASH的matepage页以及queue的metapage。typedef struct _dbmeta33 {DB_LSN lsn; //LSNdb_pgno_t pgno; //当前页号u_int32_t magic; //调试用的魔数u_int32_t version; //数据库的当前版…

yum 命令执行出现failed: BDB0113....BDB1507 Thread died in Berkeley DB library

error: rpmdb: BDB0113 Thread/process 61227/140631941699392 failed: BDB1507 Thread died in Berkeley DB library问题描述解决方案问题描述 Linux执行yum命令时出现该错误,详情如下: [rootVM-4-17-centos tmp]# yum remove -y docker error: rpmdb…