Mysql的两种存储引擎---InnoDB、MylSAM(面试题)

数据库引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据库引擎进行创建、查询、更新和删除数据,不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。

打开cmd,输入cmd -u root -p,输入密码进入

  1. 创建数据库 create database demo1;
  2. 查询所有的当前数据库连接的库  show databases;
  3. 进入其中某个库,use demo1;
  4. 查看其中所有的表 show tables;
  5. 查询当前表的所有的字段 show create table personyhb;
  6. 查询自己的数据库用的引擎 SHOW ENGINES;

有InnoDB、MRG MYISAM、MEMORY、BLACKHOLE、MyISAM、CSV、archive、performance_schema、federated

可以看出数据库为我们提供了非常多的存储引擎,从表中看出,InnoDB的Support列是default,表明InnoDB是默认的数据库引擎,不过Mysql对于多引擎有很好的兼容 ,一个数据库服务器上不同的服务器上完全可以使用不同的数据引擎,甚至一个数据库中的多个表可以使用多个不同引擎。

两者之间的差异:

InnoDB----Support transactions,row-level lockings and foreign keys
(1)InnoDB支持事务,MyISAM不支持,对于InnoDB每条SQL语句都默认封装成事务提交,这样就会影响速度,,优化速度的方式就是将多条SQL语句放在begin和end之间,组成一个事务。

(2) InnoDB支持外键,而MyISAM不支持

(3)InnoDB不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM更高。

所以如果一个表修改要求比较高的事务处理,可以选择InnoDB。数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,甚至可以考虑选择MEMORY存储引擎。

                     二.存储引擎原理

1. InnoDB、MylSAM两者引擎所用的索引的数据结构都是B+树,不过区别在于:

MylSAM中的B+树的数据结构存储的内容是实际数据的地址值,它的索引和实际数据是分开的,只不过使用索引指向实际数据,这种索引的模式被成为非聚集索引。

InnoDB中B+树的数据结构存储的都是实际的数据,这种索引称为聚集索引。

 

 

什么是索引:

唯一索引:唯一索引不允许具有相同的索引值

主键索引:是唯一索引的特殊类型,为表定义一个主键,将自动创建主键索引。主键索引要求主键中每个值是唯一的,并且不能为空。

聚集索引(clustered)表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个。

非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序,数据存储在一个位置,索引存储在另一个位置,索引中包含数据存储位置的一个指针,可以有多个,小于249个。

 

MyISAM:它的索引文件仅仅保存数据记录的地址。

MyISAM 中索引检索的算法为首先按照 B+Tree 搜索算法搜索索引,如果指定的 Key 存在,则取出其 data 域的值,然后以 data 域的值为地址,读取相应数据记录。

 

由于 InnoDB 利用的数据库主键作为索引 Key,所以 InnoDB 数据表文件本身就是主索引,且因为 InnoDB 数据文件需要按照主键聚集,所以使用 InnoDB 作为数据引擎的表需要有个主键,如果没有显式指定的话 MySQL 会尝试自动选择一个可以唯一标识数据的列作为主键,如果无法找到,则会生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。

参照整理:https://mp.weixin.qq.com/s?__biz=MzI4Mzc5NDk4MA==&mid=2247486569&idx=2&sn=97110c3d1b682c8dbb5f4e265ba715a3&chksm=eb840722dcf38e343fe8d48ad491a39d0d8015425c743fcf2febf98d577f47b4a7f23559d5a3&scene=0&xtrack=1#rd

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值