创意电子

标题: 面试被问到MySql数据库引擎,你对数据库引擎了解有多少? [打印本页]

作者: 马小呆QAQ    时间: 2021-9-16 20:12
标题: 面试被问到MySql数据库引擎,你对数据库引擎了解有多少?
前言

作为经常利用MySQL数据库的人,不得不对MySQL的数据库引擎有一定的相识,在之前我也是只会利用MySQL,但两次的面试中都被面试官问及项目用到的数据库引擎(血与泪),因此,有须要写一篇文章,好好总结一下MySQL的数据库引擎。
数据库引擎界说

数据库引擎是数据库用于存储、处理和保护数据的核心服务,差别的数据库引擎有其各自的特点,如存储机制、索引技巧、主键的处理、锁的粒度等特点便随着引擎的差别而变化。因此,针对自己项目特点选择合适的数据库引擎可以改善服务器端的存储性能。
常见的MySQL数据库引擎有以下几个:InnoDB,MyIsam,Memory,Mrg_Myisam,Blackhole等。
如何查看及设置数据库引擎

在mysql(版本5.6)下令行中利用如下下令:
show engines;可以看到如下结果:

                               
登录/注册后可看大图

可以看出,默认的数据库引擎是InnoDB。
如何更改默认数据库引擎
找到MySQL设置文件mysql.ini,首先将其备份(这是个好风俗,当需要更改Linux上设置文件时)即
cp mysql.ini mysql.ini.bak在[mysqld]反面添加default-storage-engine=引擎名字 ,保存,重启MySQL服务。
如何在建表时设置引擎及建表后更改引擎
建表时设置引擎:
create table 表名(...)type=引擎名建表后更改表的引擎:
show table status from 数据库名字;引擎详解

InnoDB引擎
InnoDB是一个事件型存储引擎,提供了对数据库ACID事件的支持,并实现了SQL尺度的四种隔离级别,具有行级锁定(这一点说明锁的粒度小,在写数据时,不需要锁住整个表,因此实用于高并发情形)及外键支持(全部数据库引擎中独一份,仅有它支持外键)
该引擎的设计目标便是处理大容量数据的数据库系统,MySQL在运行时InnoDB会在内存中建立缓冲池,用于缓存数据及索引。
可能的缺点:
实用场景:
MyIsam引擎
MyIsam引擎是MySQL主流引擎之一,但它相比起InnoDB,没有提供对数据库事件的支持,不支持细粒度的锁(行锁)及外键,当表Insert与update时需要锁定整个表,因此效率会低一些,在高并发时可能会遇到瓶颈,但MyIsam引擎独立与操纵系统,可以在windows及linux上利用。
可能的缺点:
不能在表损坏后规复数据
实用场景:
Memory(Heap)引擎
利用存在内存中的内容来创建表。每个MEMORY表只现实对应一个磁盘文件。MEMORY类型的表访问非常的快,由于它的数据是放在内存中的,并且默认利用HASH索引。但是一旦服务关闭,表中的数据就会丢失掉。HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快,但是它所管理的数据是不稳固的,而且如果在关机之前没有进行保存,那么全部的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要利用SELECT表达式来选择和操控数据的时候非常有用。
Memory同时支持散列索引和B树索引,B树索引可以利用部门查询和通配查询,也可以利用和>=等操纵符方便数据发掘,散列索引相等的比力快但是对于范围的比力慢许多
可能的缺点:
实用场景:
Mrg_MyIsam引擎
是一个雷同的可以被当作一个来用的MyISAM表的聚集。“雷同”意味着全部表同样的列和索引信息。也就是说,它将MyIsam引擎的多个表聚合起来,但是它的内部没有数据,真正的数据依然是MyIsam引擎的表中,但是可以直接进行查询、删除更新等操纵。

比如:我们可能会遇到这样的问题,同一种类的数据会根据数据的时间分为多个表,如果这时候进行查询的话,就会比力麻烦,Merge可以直接将多个表聚合成一个表同一查询,然后再删除Merge表(删除的是界说),原来的数据不会影响。
Blackhole引擎
任何写入到此引擎的数据均会被扬弃掉, 不做现实存储;Select语句的内容永远是空。他会扬弃全部的插入的数据,服务器会记载下Blackhole表的日志,所以可以用于复制数据到备份数据库。
实用场景:
总结

关于数据库引擎的先容就暂时先容到这里,固然还有别的的引擎,在这里就不外多叙述了,有爱好的话可自行谷歌,本文主要在于讲解了数据库引擎底子知识。




欢迎光临 创意电子 (https://wxcydz.cc/) Powered by Discuz! X3.4