首页 > 试题广场 >

下列有关InnoDB和MylSAM说法正确的是()

[不定项选择题]
下列有关InnoDB和MylSAM说法正确的是()
  • InnoDB不支持FULLTEXT类型的索引
  • InnoDB执行DELETE FROM table 命令时,不会重新建表
  • MylSAM的索引和数据是分开保存的
  • MylSAM支持主外键,索引及事务的存储
  1. MyISAMMySQL的默认数据库引擎(5.5版之前),由早期的ISAM所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参照完整性并发违规处理机制,后来就逐渐取代MyISAM。

    每个MyISAM数据表,皆由存储在硬盘上的3个文件所组成,每个文件都以数据表名称为文件主名,并搭配不同扩展名区分文件类型:

    1. .frm--存储数据表定义,此文件非MyISAM引擎的一部分。
    2. .MYD--存放真正的数据。
    3. .MYI--存储索引信息。

  2. InnoDB可借由事务记录档(Transaction Log)来恢复程序崩溃(crash),或非预期结束所造成的数据错误;而MyISAM遇到错误,必须完整扫描后才能重建索引,或修正未写入硬盘的错误。InnoDB的修复时间,大略都是固定的,但MyISAM的修复时间,则与数据量的多寡成正比。相对而言,随着数据量的增加,InnoDB会有较佳的稳定性。
  3. MyISAM必须依靠操作系统来管理读取与写入的缓存,而InnoDB则是有自己的读写缓存管理机制。(InnoDB不会将被修改的數據頁立即交给操作系统)因此在某些情况下,InnoDB的数据访问会比MyISAM更有效率。
  4. InnoDB目前并不支持MyISAM所提供的压缩与terse row formats,所以对硬盘与高速缓存的使用量较大。因此MySQL从5.0版开始,提供另一个负载较轻的格式,他可减少约略20%的系统负载,而压缩功能已项目于未来的新版中推出。
  5. 当操作完全兼容ACID(事务)时,虽然InnoDB会自动合并数笔连接,但每次有事务产生时,仍至少须写入硬盘一次,因此对于某些硬盘或磁盘阵列,会造成每秒200次的事务处理上限。若希望达到更高的性能且保持事务的完整性,就必使用磁盘缓存与电池备援。当然InnoDB也提供数种对性能冲击较低的模式,但相对的也会降低事务的完整性。而MyISAM则无此问题,但这并非因为它比较先进,这只是因为它不支持事务。
编辑于 2015-12-16 22:47:12 回复(1)
新版本innodb支持fulltext索引的,A怎么能算对呢
发表于 2016-03-20 13:07:45 回复(0)
MySQL 5.6.4添加了InnoDB引擎的 FULLTEXT数据类型支持
发表于 2016-11-15 17:09:00 回复(1)
A有问题,innodb从mysql5.6版本开始提供对全文索引的支持。
发表于 2016-06-28 11:04:35 回复(0)
看不懂
发表于 2016-09-07 19:31:29 回复(0)
目前MySQL5.6已经引入了InnoDB对于FULLTEXT索引的支持,实验结果如下图,亲测有效:

发表于 2016-08-31 10:35:21 回复(0)
mysql 5.6之后 InnoDB是支持 FULLTEXT 的
发表于 2016-03-18 10:48:21 回复(1)
Mylsam不提供事务支持。
编辑于 2016-01-21 15:07:51 回复(0)
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持
发表于 2015-10-14 21:59:12 回复(0)
MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:

MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。

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。在未来的分发版中,我们想要让它使用其它驱动器或客户端连接方法连接到另外的数据源。

比较常用的是MyISAM和InnoBD


  

  
  MyISAM

  
  InnoDB

  
  构成上的区别:

  
  每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。

  .frm文件存储表定义。

  数据文件的扩展名为.MYD (MYData)。

  索引文件的扩展名是.MYI (MYIndex)。

  
  基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB
  
  事务处理上方面 :

  
  MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持

  
  InnoDB提供事务支持事务,外部键(foreign key)等高级数据库功能

  
  SELECT   UPDATE,INSERT Delete 操作
  
  如果执行大量的SELECT,MyISAM是更好的选择

  
  1.如果你的数据执行大量的INSERT UPDATE,出于性能方面的考虑,应该使用InnoDB表

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

  3.LOAD   TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用

  
   AUTO_INCREMENT 的操作

  
  
  每表一个AUTO_INCREMEN列的内部处理。

  MyISAM INSERT UPDATE 操作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。

  AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置

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

  更好和更快的auto_increment处理

  
  如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数器的计数器,它被用在为该列赋新值。

  自动增长计数器仅被存储在主内存中,而不是存在磁盘上

  关于该计算器的算法实现,请参考

  AUTO_INCREMENT 列在 InnoDB 里如何工作

  
  表的具体行数
  
  select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含   where条件时,两种表的操作是一样的

  
  InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行

  
  
  
  表锁

  
  提供行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in
   SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表, 例如update table set num=1 where name like “%aaa%”

编辑于 2015-10-15 08:26:59 回复(3)
现在,MySQL 5.6.4里添加了InnoDB引擎的  Full-Text索引支持
所有答案 A 有待考量。。
发表于 2015-11-02 11:33:59 回复(0)
几百年前的题牛客怎么还弄出来?
发表于 2024-10-30 15:39:32 回复(0)
MySQL 5.6.4里添加了InnoDB引擎的  Full-Text索引支持 
MyISAM引擎支持索引和主键,不支持事务
编辑于 2021-07-21 19:40:31 回复(0)
myisam不支持事务
发表于 2021-03-11 23:36:24 回复(0)
这个题目不严谨,对于答案A,不同的MySQL版本,结果是不一样的。
在MySQL5.5版本时,只有myisam引擎支持全文索引;
在MySQL5.6版本时,innodb也开始支持全文索引了,但是仅支持英文全文索引;
在MySQL5.7版本开始,MySQL内置了ngram插件,用来支持中文分词,从此便完美支持中英文全文索引了。

发表于 2019-12-13 17:25:07 回复(1)
题目不严谨,A选项应该说个版本
发表于 2018-12-24 12:48:53 回复(0)
ABC
发表于 2017-12-04 08:44:11 回复(0)

InnoDB  在 MySQL 5.6.4开始支持FULLTEXT索引,题目有点问题。


如下是官方文档:

InnoDB INFORMATION_SCHEMA FULLTEXT Index Tables

https://dev.mysql.com/doc/refman/5.7/en/innodb-information-schema-fulltext_index-tables.html

InnoDB FULLTEXT Indexes

https://dev.mysql.com/doc/refman/5.7/en/innodb-fulltext-index.html
发表于 2017-03-11 09:33:15 回复(0)