如何查看mysql数据库的引擎/MySQL数据库引擎详解

作者&投稿:关育 (若有异议请与网页底部的电邮联系)
~

一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看:看你的mysql现在已提供什么存储引擎:mysql> show engines;看你的mysql当前默认的存储引擎:mysql> show variables like ‘%storage_engine%‘;你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):mysql> show create table 表名;



MySQL数据库引擎详解
作为Java程序员,MySQL数据库大家平时应该都没少使用吧,对MySQL数据库的引擎应该也有所了解,这篇文章就让我详细的说说MySQL数据库的Innodb和MyIASM两种引擎以及其索引结构。也来巩固一下自己对这块知识的掌握。

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

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。

B-Tree和B+Tree
B+Tree是B-Tree的变种,那么我就先讲B-Tree吧,相信大家都知道红黑树,这是我前段时间学《算法》一书时,实现的一颗红黑树,大家 可以参考。其实红黑树类似2,3-查找树,这种树既有2叉结点又有3叉结点。B-Tree也与之类似,它的每个结点做多可以有d个分支(叉),d称为B- Tree的度,如下图所示,它的每个结点可以有4个元素,5个分支,于是它的度为5。B-Tree中的元素是有序的,比如图中元素7左边的指针指向的结点 中的元素都小于7,而元素7和16之间的指针指向的结点中的元素都处于7和16之间,正是满足这样的关系,才能高效的查找:首先从根节点进行二分查找,找 到就返回对应的值,否则就进入相应的区间结点递归的查找,直到找到对应的元素或找到null指针,找到null指针则表示查找失败。这个查找是十分高效 的,其时间复杂度为O(logN)(以d为底,当d很大时,树的高度就很低),因为每次检索最多只需要检索树高h个结点。



接下来就该讲B+Tree了,它是B-Tree的变种,如下面两张图所示:



vcHLx/i85LLp0a/Qp8LKoaM8L3A+DQo8aDMgaWQ9"myisam引擎的索引结构">MyISAM引擎的索引结构


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

Innodb引擎的索引结构
MyISAM引擎的索引结构同样也是B+Tree,但是Innodb的索引文件本身就是数据文件,即B+Tree的数据域存储的就是实际的数据,这种索引就是聚集索引。这个索引的key就是数据表的主键,因此InnoDB表数据文件本身就是主索引。

因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。

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


如何查看mysql数据库的引擎/MySQL数据库引擎详解
标签:




MongoDB 是什么?看完你就知道了
MongoDB的主要客户端是可以交互的js shell 通过mongo启动,使用js shell能使用js直接与MongoDB进行交流,像使用sql语句查询mysql数据一样使用js语法查询MongoDB的数据,另外还提供了各种语言的驱动包,方便各种语言的接入。 mongodump和mongorestore,备份和恢复数据库的标准工具。输出BSON格式,迁移数据库。 mongoexport和mongo...

mysql数据库在安装时默认的字符集编码为utf8但是为什么向数据库插入...
2.查看默认字符集(默认情况下,mysql的字符集是latin1(ISO_8859_1)通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:mysql> SHOW VARIABLES LIKE 'character%';+---+---+ | Variable_name | Value | +---+---+ | character_set_client | latin1 ...

请问,linux下mysql创建用户,具有所有数据库所有表并且具有所有操作的...
默认root用户就具有所有的权限,你可以新建一个用户,使它拥有所有的权限,还可以指定从什么地方登陆。权限划分可以很细的,可以精确到table,像select这种简单的查看功能命令都可以限定。具体命令像create,grant等等可以找本书看看。用户访问权限:mysql.user 全局层级权限(global privileges)db 数据库层...

MySQL 事务的默认隔离级别是什么?可以解决幻读问题么?
MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读) 。我们可以通过 SELECT @@tx_isolation; 命令来查看,MySQL 8.0 该命令改为 SELECT @@transaction_isolation;从上面对 SQL 标准定义了四个隔离级别的介绍可以看出,标准的 SQL 隔离级别定义里,REPEATABLE-READ(可重复读)是...

MySQL驱动问题,有请高手解决??
你的加载驱动语句是:String driveName = "com.mysql.jdbc.Driver" ;你的驱动jar包mysql-connector-java-5.0.4-bin.jar 你得确保驱动包里面有com.mysql.jdbc.这个可以通过myeclipse查看 如果你没有看到com.mysql.jdbc.那就说明你加载驱动的语句错了,可能是别的库。。。例如,我加载一个jar:mysql-...

mysql 普通索引和全文索引的区别
MySQL全文索引 FULLTEXT索引和like的区别 fulltext ,其实是一个索引,like语句很难用索引,所以提升了效率。fulltext ,支持多个字段检索。搜索功能一般都用带有中文分词的开源产品,像xunsearch。一般小项目用like就行了

缺少mysqli 扩展.请检查 PHP 配置?
IIS下phpinfo()无mysql模块是何原因?原先用的php是.msi安装的,后来全部重来了一次,换成压缩包形式安装的。又照着配置了php.ini,复制到winnt,复制libmysql.dll到system32。之后测试成功。。。第二步,查看 extension_dir 的设置是否正确 第三步,查看是否把 libmysql.dll 文件复制到 c:windowssystem...

如何有效地提高 MySQL 的备份和恢复速度
如果非要使用逻辑备份,可以考虑mysqldumper, mysqlpump(5.7)这两个工具去备份,这两个在备份的时候支持并行操作,mysqldumper还可以对单表进行恢复,在只需要恢复单表的情况下,恢复速度会大大加快使用物理备份 xtrabackup (open source),MEB(oracle提供,收费): 他们的备份原理是基于mysql crash recover...

MySQL问答系列之如何避免ibdata1文件大小暴涨
ibdata1存放数据,索引和缓存等,是MYSQL的最主要的数据。所以随着数据库越来越大,表也会越大,这个无法避免的。如果时间长了,越来越大,我们在处理日志和空间的时候就不是那么方便了,就不知从何入手了。接下来我们就要处理下这样的情况,分库存储数据。遇到InnoDB的共享表空间文件ibdata1文件大小暴增...

Access denied for user 'root'@'localhost' (using password: YES)_百...
2)用户的端口号或者IP导致 3)mysql的配置文件错误---my.ini等文件 4)root用户的密码错误 若MySQL已经没有启动,重启MySQL服务器:net start mysql 若用户的端口号与IP(3306\/3307)不一致,打开my.ini文件进行编辑。全部编辑替换为: port=X my.ini文件误输入无效内容,不知道到何处。复制替换该...

曲松县18065994771: 如何查看mysql数据库的引擎 -
戊芳非可: 一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎: mysql> show engines; 看你的mysql当前默认的存储引擎: mysql> show variables like '%storage_engine%'; 你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎): mysql> show create table 表名;

曲松县18065994771: 如何查看mysql数据库的引擎/MySQL数据库引擎详解 -
戊芳非可: 查看当前表的默认存储引擎,可以使用如下图所示的命令.查询之后,我们可以查看笔者这里这个表默认的存储引擎是:InnoDB.如果我们想知道当前MySQL提供什么存储引擎,可以使用如下图所示的命令.通过查询我们知道,笔者所安装的...

曲松县18065994771: 如何查看自己所用数据库的引擎? -
戊芳非可: show engines\G; 然后找到 support:default 的 引擎 就是 数据库 默认引擎.

曲松县18065994771: 查看当前mysql中支持的存储引擎并显示详细的sql语句是? -
戊芳非可: show engines;

曲松县18065994771: 如何查看mysql innodb -
戊芳非可: mysql被设计成了一个单进程多线程架构的数据库 开始:1、默认的InnoDB存储引擎的后台线程有7个,4个IO thread ,1个master thread 1个锁监控 thread 1个错误监控thread,IO thread 的数量由配置文件的innodb_file_io_threads参数控制,默认是4...

曲松县18065994771: 怎么使用Mysql Workbench 查询mysql数据库 -
戊芳非可: 我的是MySQL Workbench 6.3 CE 点击菜单 database-connect to database (此时保证你的MySQL软件是打开的)-ok 就行了

曲松县18065994771: 如何查看mysql数据库的性能 -
戊芳非可: 如何提高MySQL Limit查询的性能? 在MySQL数据库操作中,我们在做一些查询的时候总希望能避免数据库引擎做全表扫描,因为全表扫描时间长,而且其中大部分扫描对客户端而言是没有意义的.其实我们可以使用Limit关键字来避免全表扫...

曲松县18065994771: mysql两种引擎,如何查找某个端口号并关闭 -
戊芳非可: 方法一:进入mysql cmd,status;将显示当前mysql的version的各种信息. 方法二:还是在mysql的cmd下,输入:select version()

曲松县18065994771: 如何开启mysql innodb存储引擎 -
戊芳非可: INNODB引擎默认是开启的,SHOW ENGINES可以查看所有存储引擎如果没有开启,可以去配置文件里添加default-storage-engine = InnoDB

曲松县18065994771: mysql数据库引擎怎么选择 -
戊芳非可: CREATE TABLE 表名 (字段……) ENGINE=InnoDB 就可以了啊如果还不行,就直接到MySQL目录里的my.ini文件中把default-storage-engine这一行改过来,把默认的存储引擎改为InnoDB,重启数据库服务器就行了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网