zl程序教程

您现在的位置是:首页 >  IT要闻

当前栏目

MySQL 精选面试题助力数据库新手

2023-02-18 15:29:20 时间

1、关系型和非关系型数据库的区别?

关系型数据库的优点


容易理解,因为它采用了关系模型来组织数据。

可以保持数据的一致性。

数据更新的开销比较小。

支持复杂查询(带 where 子句的查询)



非关系型数据库(NOSQL)的优点

无需经过 SQL 层的解析,读写效率高。

基于键值对,读写性能很高,易于扩展

可以支持多种类型数据的存储,如图片,文档等等。

扩展(可分为内存性数据库以及文档型数据库,比如 Redis,MongoDB,HBase 等,适合场景:数据量大高可用的日志系统/地理位置存储系统)。



2、详细说一下一条 MySQL 语句执行的步骤

Server 层按顺序执行 SQL 的步骤为:


客户端请求 -> 连接器(验证用户身份,给予权限)

查询缓存(存在缓存则直接返回,不存在则执行后续操作)

分析器(对 SQL 进行词法分析和语法分析操作)

优化器(主要对执行的 SQL 优化选择最优的执行方案方法)

执行器(执行时会先看用户是否有执行权限,有才去使用这个引擎提供的接口)-> 去引擎层获取数据返回(如果开启查询缓存则会缓存查询结果)



3、MySQL 使用索引的原因?

根本原因


索引的出现,就是为了提高数据查询的效率,就像书的目录一样。

对于数据库的表而言,索引其实就是它的“目录”。

扩展


创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

帮助引擎层避免排序和临时表

将随机 IO 变为顺序 IO,加速表和表之间的连接。

 

4、索引的三种常见底层数据结构以及优缺点

三种常见的索引底层数据结构:分别是哈希表、有序数组和搜索树。


哈希表这种适用于等值查询的场景,比如 memcached 以及其它一些 NoSQL 引擎,不适合范围查询。

有序数组索引只适用于静态存储引擎,等值和范围查询性能好,但更新数据成本高。

N 叉树由于读写上的性能优点以及适配磁盘访问模式以及广泛应用在数据库引擎中。

扩展(以 InnoDB 的一个整数字段索引为例,这个 N 差不多是 1200。棵树高是 4 的时候,就可以存 1200 的 3 次方个值,这已经 17 亿了。考虑到树根的数据块总是在内存中的,一个 10 亿行的表上一个整数字段的索引,查找一个值最多只需要访问 3 次磁盘。其实,树的第二层也有很大概率在内存中,那么访问磁盘的平均次数就更少了。)

5、索引的常见类型以及它是如何发挥作用的?

根据叶子节点的内容,索引类型分为主键索引和非主键索引。


主键索引的叶子节点存的整行数据,在InnoDB里也被称为聚簇索引。

非主键索引叶子节点存的主键的值,在InnoDB里也被称为二级索引。