当前位置:首页 » 编程语言 » 阿里mysqlsql解析引擎
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

阿里mysqlsql解析引擎

发布时间: 2023-07-03 15:25:50

❶ 如何查看my sql数据库的引擎

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

❷ Mysql数据库3种存储引擎有什么区别(mysql数据库的存储引擎有哪些)

MySQL常见的三种存储引擎为InnoDB、MyISAM和MEMORY。其区别体现在事务安全、存储限制、空间使用、内存使用、插入数据的速度和对外键的支持。具体如下:

1、事务安全:

InnoDB支持事务安全,MyISAM和MEMORY两个不支持。

2、存储限制:

InnoDB有64TB的存储限制,MyISAM和MEMORY要是具体情况而定。

3、空间使用:

InnoDB对空间使用程度较高,MyISAM和MEMORY对空间使用程度较低。

4、内存使用:

InnoDB和MEMORY对内存使用程度较高,MyISAM对内存使用程度较低。

5、插入数据的速度:

InnoDB插入数据的速度较低,MyISAM和MEMORY插入数据的速度较高。

6、对外键的支持:

InnoDB对外键支持情况较好,MyISAM和MEMORY两个不支持外键。

三种引擎特点如下:

1、InnoDB存储引擎

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),其它存储引擎都是非事务安全表,支持行锁定和外键,MySQL5.5以后默认使用InnoDB存储引擎。

InnoDB特点:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。

如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)租芹。

2、MyISAM存储引擎

MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事务,不支持外键。

MyISAM特点:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用

3、MEMORY存储引擎

MEMORY存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问

MEMORY特点:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。

它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

(2)阿里mysqlsql解析引擎扩展阅读:

mysql其余不太常见的存储引擎如下:

1、BDB:源自BerkeleyDB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性

2、Merge:将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用

3、Archive:非常适合存储大量稿型慧的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差

4、Federated:将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用

5、Cluster/NDB:高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用

6、CSV:逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用键答一个文本行。CSV存储引擎不支持索引。

7、BlackHole:黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继

❸ sql优化及原理详解,五分钟读懂sql优化

在我而言这算是一个复习,然后总结出来给大家当个教材吧。
我也是看视频总结出来的笔记,所以说的都很简单和浅薄。有不全面或者偏颇的地方欢迎指出,共同交流进步哈。(因为我当时是看视频总结的笔记,所以可能说的比较杂乱,我尽量写的分明一点,在最后会附上笔记,忽略我字丑)

索引是什么呢?它相当于字典的目录。
索引:index是帮助mysql高效获取数据的数据结构,索引是数据结构(树,默认是B树),hash等。
索引的弊端: 事物都是两面的,有利必然有弊。

索引的优势: 索引有这么多弊端我们还使用的原因是因为优大于劣。

索引的分类:

举个小例子让大家更理解复合索引:如果我把一个表中name,age这两个列做成复合索引(注意顺序很重要)。那么我们形成的目录一级目录是name,二级目录是age。在name相同时才会age再形成目录。因为它本身的排序不是像目录一样一行一行列出来的,所以我们尽量用目录来想象它比较好理解。下面是图解:

有几点注意的事项:

这里说一下,上面说的方法都是原生的sql,比如我现在习惯使用navicat,所以可以直接操作。。爽的不行。

然后删除查询也都是直接可视的,方便的不得了。就不多说了。

mysql做例子,还有个引擎是可以优化的。mysql中引擎分两种:

sql优化等级:

上面说的这些等级在explain中可以看到。

单表优化常用方法:

多表优化常用方法:

因为上面也提到了b树,所以还是单独聊聊吧。其实我也不是很理解。只能说一个浅显的认识而已。这里也就是简单的说一下。
首先,B树不仅可以二叉,还可以三叉,多叉。而只要大于二叉的都叫做BTree。
据说三层BTree可以存放上百万数据。
BTree一般都指B+树,数据全部存放在叶节点中。(这里简单的一个三叉树图)

好了,就写到这里吧,希望日后算法的知识会的更多以后能把B树这个坑填完~~~然后有不同意见或者自己理解的可以留言或者私聊。
全文手打,如果你觉得对你有帮助麻烦点个赞点个关注啥的~~

❹ MySql中Sql的执行过程

如果查询缓存没有命中,那么SQL请求会进入分析器,分析器是用来分辨SQL语句的执行目的,其执行过程大致分为两步:

表1 语法分析关键字然后再通过语法规则解析,判断输入的SQL 语句是否满足MySQL语法,并且生成图5的语法树。由SQL语句生成的四个单词中,识别出两个关键字,分别是select 和from。根据MySQL的语法Select 和 from之间对应的是fields 字段,下面应该挂接username;在from后面跟随的是Tables字段,其下挂接的是userinfo。

优化器的作用是对SQL进行优化,生成最有的执行方案。如图6所示,前面提到的SQL解析器通过语法分析和语法规则生成了SQL语法树。这个语法树作为优化器的输入,而优化器(黄色的部分)包含了逻辑变换和代价优化两部分的内容。在优化完成以后会生成SQL执行计划作为整个优化过程的输出,交给执行器在存储引擎上执行。

所处的位置如上图所示,这节的重点在优化器中的逻辑变换和代价优化上。

逻辑变换也就是在关系代数基础上进行变换,其目的是为了化简,同时保证SQL变化前后的结果一致,也就是逻辑变化并不会带来结果集的变化。其主要包括以下几个方面:

这样讲概念或许有些抽象,通过图7 来看看逻辑变化如何在SQL中执行的吧。

如图7所示,从上往下共有4个步骤:
1. 针对存在的SQL语句,首先通过“否定消除”,去掉条件判断中的“NOT”。语句由原来的“or”转换成“and”,并且大于小于符号进行变号。蓝色部分为修改前的SQL,红色是修改以后的SQL。2. 等值传递,这一步很好理解分别降”t2.a=9” 和”t2.b=5”分别替换掉SQL中对应的值。3. 接下来就是常量表达式计算,将“5+7”计算得到“12”。4. 最后是常量表达式计算后的化简,将”9<=10”化简为”true”带入到最终的SQL表达式中完成优化。

代价优化是用来确定每个表,根据条件是否应用索引,应用哪个索引和确定多表连接的顺序等问题。为了完成代价优化,需要找到一个代价最小的方案。因此,优化器是通过基于代价的计算方法来决定如何执行查询的(Cost-based Optimization)。简化的过程如下:

这里将配置操作的代价分为MySQL 服务层和MySQL 引擎层,MySQL 服务层主要是定义CPU的代价,而MySQL 引擎层主要定义IO代价。MySQL 5.7 引入了两个系统表mysql.server_cost和mysql.engine_cost来分别配置这两个层的代价。如下:MySQL 服务层代价保存在表server_cost中,其具体内容如下:

由上可以看出创建临时表的代价是很高的,尤其是内部的myisam或innodb临时表。MySQL 引擎层代价保存在表engine_cost中,其具体内容如下:

目前io_block_read_cost和memory_block_read_cost默认值均为1,实际生产中建议酌情调大memory_block_read_cost,特别是对普通硬盘的场景。MySQL会根据SQL查询生成的查询计划中对应的操作从上面两张代价表中查找对应的代价值,并且进行累加形成最终执行SQL计划的代价。再将多种可能的执行计划进行比较,选取最小代价的计划执行。

当分析器生成查询计划,并且经过优化器以后,就到了执行器。执行器会选择执行计划开始执行,但在执行之前会校验请求用户是否拥有查询的权限,如果没有权限,就会返回错误信息,否则将会去调用MySQL引擎层的接口,执行对应的SQL语句并且返回结果。例如SQL:“SELECT * FROM userinfo WHERE username = 'Tom';“假设 “username“ 字段没有设置索引,就会调用存储引擎从第一条开始查,如果碰到了用户名字是” Tom“, 就将结果集返回,没有查找到就查看下一行,重复上一步的操作,直到读完整个表或者找到对应的记录。需要注意SQL语句的执行顺序并不是按照书写顺序来的,顺序的定义会在分析器中做好,一般是按照如下顺序:

如果命中的记录比较多,应用会从MySql Server一批批获取数据

本文从MySQL中SQL语句的执行过程作为切入点,首先介绍了查询请求的执行流程,其中将MySQL的处理分为MySQL Server层和MySQL存储引擎层。通过介绍SQL语句的流转,引出了后面要介绍的5大组件,他们分别是:连接器、查询缓存、分析器、优化器、执行器。后面的内容中对每个组件进行了详细的介绍。连接器,负责身份认证和权限鉴别;查询缓存,将查询的结果集进行缓存,提高查询效率;分析器,对SQL语句执行语法分析和语法规则,生成语法树和执行计划;优化器,包括逻辑变换和代价优化;执行器,在检查用户权限以后对数据进行逐条查询,整个过程遵守SQL语句的执行顺序。

❺ MySQL数据库常用的搜索引擎有哪些,区别是什么

MyISAM、InnoDB、Heap(Memory)、NDB
貌似一般都是使用 InnoDB的,
mysql的存储引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
最常使用的2种存储引擎:
1.Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是.frm(存储表定义)、.MYD(MYData,存储数据)、.MYI(MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。
2.InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

❻ mysql数据库支持的存储引擎有哪些默认的存储引擎是什么主要特性有什么

1、MySQL常见的存储引擎有:InnoDB、MyISAM。

2、Mysql 5.0之后的版本,默认的存储引擎就是InnoDB。

3、各自主要特点有:

  • 事务:MyISAM不支持,InnoDB支持。

  • 锁级别: MyISAM 表级锁,InnoDB 行级锁及外键约束。

  • MyISAM存储表的总行数;InnoDB不存储总行数。

  • MyISAM采用非聚集索引,B+树叶子存储指向数据文件的指针。InnoDB主键索引采用聚集索引,B+树叶子存储数据。

  • MyISAM适合场景: 插入不频繁,查询非常频繁,如果执行大量的SELECT,MyISAM是更好的选择, 没有事务。

  • InnoDB适合场景: 可靠性要求比较高,或者要求事务; 表更新和查询都相当的频繁, 大量的INSERT或UPDATE。

❼ 怎么查看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-5.1版本之前默认引擎是MyISAM,之后是innoDB。
MyISAM是非集聚引擎,支持全文索引;不支持事务;它是表级锁;会保存表的具体行数。innoDB是集聚引擎,5.6以后才有全文索引;支持事务;它是行级锁;不会保存表的具体行数。一般:不用事务的时候,count计算旁燃多的时候适合myisam引擎。对可靠性要求高就是用innodby引擎。
MySQL有9种存储引擎,不同的引擎,适合不同的场景,我们最常用的,可能就是InnoDB,应该是从5.5开始,就成为了MySQL的默认存储引擎。InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和卜洞外键型启枯,InnoDB是默认的MySQL引擎。

❾ 什么是MySQL什么又是SQL

简单的说:
SQL是一种经典的关系型数据库引擎,作为搭建、开发与管理后台数据库的,很流行,用途也很广,有专用的SQL命令语句、语法。MySql可以说是SQL的简化版(也可以称为轻量级版),支持大部分SQL的语句和语法。两者在功能和处理数量(记录量)级别上有一些区别。
另外,SQL系充是收费的(正版),而MySql是开源的、免费的,拿来简单设置一下就可以用。别看Mysql是轻量级的SQL,但它的处理级别也是千万级甚至上亿级了,应付一般的单位与企业足够了。

❿ 什么是MySQL存储引擎

MySQL 可能是最着名的 关系数据库管理系统 (RDBMS),作为一款免费开源软件开发,最初由 MYSQL AB 公司提供支持,但现在归 Oracle 所有。

在 MySQL 中,用于表的“存储引擎”决定了数据的处理方式。有几种可用的存储引擎,但最常用的是 InnoDB MyISAM

在本文中,我们将了解它们的显着特征以及它们之间的主要区别。

在本教程中,您将学习:

在我们讨论两个主要 MySQL 存储引擎之间的特性和区别之前,先来了解一下什么是存储引擎?

存储引擎,也称为“ 表处理程序 ”,基本上是解释和管理与数据库表的 SQL 查询相关的操作的数据库部分。

在最新版本的 MySQL 中,可以使用“ 可插拔 ”架构来组织和管理存储引擎,存在多种存储引擎,但最常用的两个是 InnoDB MyISAM

要获得我们正在使用的数据库中可用存储引擎的列表,我们所要做的就是发出一个简单的 SQL 查询,因此我们需要做的第一件事就是打开一个 MySQL 交互式提示并使用数据库用户登录及其密码:

如果登录成功,提示将变为mysql>,在这里,我们可以运行我们的 SQL 查询来可视化可用的存储引擎:

执行查询后,我们应该获得类似于以下内容的结果:

在上表中,作为查询结果生成,我们可以通过查看Support每行列中的值轻松了解支持哪些存储引擎,“YES”值表示存储引擎可用,否则“NO”。相反,同一列中的“DEFAULT”值表示相应的引擎(在本例中为 InnoDB)是服务器使用的默认引擎。

Transactions ”和“ Savepoints ”列中存在的值分别表示存储引擎是否支持事务和回滚。正如我们通过查看表可以看到的,只有 InnoDB 引擎可以。

关于存储引擎的信息存在于“ INFORMATION_SCHEMA ”数据库的“ ENGINES ”表中,因此我们也可以发出标准的“SELECT”查询来获取我们需要的数据:

我们将获得与上面看到的相同的结果。

让我们看看两个最常用的存储引擎 InnoDB 和 MyISAM 之间的主要特性和区别是什么。

正如我们已经说过的, InnoDB 是自 MySQL 以来的默认存储引擎5.5。

此存储引擎的一些主要功能如下:

对事务的支持提供了一种安全的方式来执行多个查询以保持数据一致。

当多个修改数据的操作被执行并且我们想要确保它们只有在所有操作都成功并且没有错误发生时才有效时,我们想要使用事务。

典型的处理方式是启动事务并执行查询:如果出现错误,则执行回滚,否则提交更改。

当使用 InnoDB 数据锁定发生在行级别时,因此在事务期间锁定的数据量是有限的。

InnoDB 有两种类型的锁:

一个共享锁允许谁拥有它读取该行的交易,而一个排它锁允许交易执行其修改行的操作,所以要更新或删除数据。

当一个事务在某行上获得共享锁,而另一个事务需要相同的锁类型时,立即授予;但是,如果第二个事务在同一行上请求排他锁,它将不得不等待。

如果第一个事务持有该行的排他锁,则第二个事务将不得不等待该锁被释放以获得共享锁或排他锁。

外键是一个非常重要的特性,因为它们可用于基于表之间的逻辑关系来强制执行数据完整性。想象一下,我们的数据库中有三个表(假设它被称为“testdb”):一个user包含现有用户的job表,一个注册所有可用作业的user_job表,以及一个用于表示用户和用户之间存在的多对多关系的表。作业(一个用户可以有多个作业,多个作业可以与同一个用户关联)。

该user_job表就是所谓的连接表或关联表,因为它的唯一目的是表示用户-工作关联。该表有两列,一个叫user_id和其他job id。表中会存在两个外键约束,强制执行以下规则:user_id列中的值只能引用表id列中的值,列中的user值job_id必须引用表id列中的现有值job.

这将强制执行完整性,因为仅允许现有用户和作业的 ID 存在于关联表中。删除涉及表中一个或多个关联的用户或作业user_job也是不允许的,除非为相应的外键设置了CASCADE DELETE规则。在这种情况下,当删除用户或作业时,它们所涉及的关系也将被删除。

MyISAM 曾经是默认的 MySQL 存储引擎,但已被 InnoDB 取代。使用此引擎时,数据锁定发生在表级别,因此执行操作时锁定的数据更多。

与 InnoDB 不同,MyISAM 不支持事务回滚和提交,因此必须手动执行回滚。MyISAM 和 InnoDB 之间的另一个很大区别是前者不支持外键。MyISAM 更简单,并且在对有限数据集进行读取密集型操作时可能具有优势(有争议)。

在表上使用 MyISAM 时,会设置一个标志,指示该表是否需要修复,例如在突然关闭之后。稍后可以使用适当的工具执行表修复。

如何知道特定表使用了什么存储引擎?我们所要做的就是发出一个简单的查询。

例如,要知道user我们在前面的例子中提到的表使用了什么存储引擎,我们将运行:

注意上面的查询我们使用了G,为了让查询结果垂直显示,优化空间。执行查询后,我们将获得以下结果:

在这种情况下,通过查看“Engine”列中存储的值,我们可以清楚地看到该表使用的是“InnoDB”引擎。获取相同信息的另一种方法是INFORMATION_SCHEMA.TABLES直接查询表:

上面的查询将只返回表使用的引擎:

如果我们稍微更改查询,我们可以获得数据库中所有表名的列表以及它们使用的引擎:

如果我们要为一个表设置一个特定的存储引擎,我们可以在创建时指定它。例如,假设我们正在创建job表,并且出于某种原因我们想要使用 MyISAM 存储引擎。我们将发出以下 SQL 查询:

相反,如果我们想要更改用于已存在表的存储引擎,我们只需要使用ALTERSQL 语句。假设我们要将上一个示例中创建的“job”表所使用的存储引擎更改为 InnoDB;我们会运行:

在本教程中,我们学习了什么是数据库存储引擎,并且我们看到了两个最常用的 MySQL 引擎的主要特性: InnoDB MyISAM

我们看到了如何检查哪些引擎可用、哪些引擎用于表以及如何使用 SQL 查询设置和修改表引擎。