开发/数据库

  |  手机版

收藏网站

投稿QQ:1745232315

IT专家网,汇聚专业声音 解析IT潮流 IT专家网,汇聚专业声音 解析IT潮流

网络

专家视点在现场环球瞭望
IT专家网 > 开发/数据库

20道常见数据库面试题 你能hold住吗?

作者:互联网出处:论坛2018-09-12 17:20

  求职面试,总少不了被问一些专业问题,尤其像数据库这种专业行业,更少不了面试官的提问。今天,小编就为大家整理了一份关于数据库常见的面试题,希望你都能答对!

  1.事务四大特性是什么?

  原子性,要么执行,要么不执行

  隔离性,所有操作全部执行完以前,其它会话不能看到过程

  一致性,事务前后,数据总额一致

  持久性,一旦事务提交,对数据的改变就是永久的

  2.数据库隔离级别,每个级别会引发什么问题,mysql默认是哪个级别

  脏读:事务B读取事务A还没有提交的数据

  不可重复读:两次事务读的数据不一致

  幻读:事务A修改了数据,事务B也修改了数据,这时在事务A看来,明明修改了数据,昨不一样,

  隔离级别 读数据一致性 脏读 不可重复读 幻读

  未提交读 最低级别 是 是 是

  已提交读 语句级 否 是 是

  事务级 事务级 否 否 是

  串行化 最高级别 否 否 否

  3.MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景

  MYISAM 不支持事务,不支持外键,表锁,插入数据时,锁定整个表,查表总行数时,不需要全表扫描

  INNODB 支持事务,支持外键,行锁,查表总行数时,全表扫描

  4.索引有B+索引和hash索引,各自的区别

  hash索引,等值查询效率高,

  不能排序

  不能进行范围查询

  B+索引

  数据有序

  范围查询

  5.B+索引数据结构,和B树的区别

  1.单一节点存储更多的元素,B+树空间利用率更高,使得查询的IO次数更少。

  2.所有查询都要查找到叶子节点,查询性能稳定。

  3.所有叶子节点形成有序链表,便于范围查询

  6.索引的底层实现(B+树,为何不采用红黑树,B树)

  增加,删除,红黑树会进行频繁的调整,来保证红黑树的性质,浪费时间

  B树,查询性能不稳定,查询结果高度不致,

  B树,每个结点保存指向真实数据的指印,相比B+树每一层每屋存储的元素更多,显得更高一点。

  7.聚集索引和非聚集索引的区别

  聚集索引,数据按索引顺序存储,中子结点存储真实的物理数据

  非聚集索引,存储指向真正数据行的指针

  8.索引的优缺点,什么时候使用索引,什么时候不能使用索引(重点)

  索引最大的好处是提高查询速度,

  缺点是更新数据时效率低,因为要同时更新索引

  对数据进行频繁查询进建立索引,如果要频繁更改数据不建议使用索引。

  9.B树,也是B-树

  先看二叉查找树,时间复杂度log(n),考虑磁盘IO,所以需要二叉查找树矮宽,减小树的高度。

  1.根结点至少有两个子女。

  2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m

  3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m

  4.所有的叶子结点都位于同一层。

  5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划

  k的大小取决于磁盘页的大小,主存和磁盘以页为单位交换数据。当程序要读取的数据不在主存中时,会触发一个缺页异常,

  此时系统会向磁盘发出读盘信号,磁盘会找到数据的起始位置并向后连续读取一页或几页载入内存中,然后异常返回,程序继续运行。

  10.InnoDB索引和MyISAM索引的区别

  一是主索引的区别,InnoDB的数据文件本身就是索引文件。而MyISAM的索引和数据是分开的。

  二是辅助索引的区别:InnoDB的辅助索引data域存储相应记录主键的值而不是地址。而MyISAM的辅助索引和主索引没有多大区别。

  11.为什么使用B-/+Tree

  索引查找过程中就要产生磁盘I/O消耗,主要看IO次数,和磁盘存取原理有关。

  根据B-Tree的定义,可知检索一次最多需要访问h个节点。数据库系统的设计者巧妙利用了磁盘预读原理,

  将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入

  局部性原理与磁盘预读

  12.B+树具体实现

  一个m阶的B+树具有如下几个特征:

  1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。

  2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。

  3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素

  13.数据库的优化(一条sql中能使用一个索引,多个索引会自动选择最优的索引,从sql语句优化和索引两个部分回答)

  原则1.sql尽量使用索引

  2.对sql语句优化

  子查询变成left join

  limit 分布优化,先利用ID定位,再分页

  or条件优化,多个or条件可以用union all对结果进行合并(union all结果可能重复)

  不必要的排序

  where代替having,having 检索完所有记录,才进行过滤

  避免嵌套查询

  对多个字段进行等值查询时,联合索引

  14.是否使用索引explain查看查询计划

  15.索引最左前缀问题

  如果对三个字段建立联合索引,如果第二个字段没有使用索引,第三个字段也使用不到索引了。

  16.索引分类,索引失效条件

  普通索引:最基本的索引,没有任何限制

  唯一索引:与”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。

  主键索引:它是一种特殊的唯一索引,不允许有空值。

  全文索引:针对较大的数据,生成全文索引很耗时好空间。

  组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则

  失效条件

  条件是or,如果还想让or条件生效,给or每个字段加个索引

  like查询,以%开发

  内部函数

  对索引列进行计算

  is null不会用,is not null 会用

  16.数据库的主从复制

  默认异步复制,容易造成主库数据和从库不一致

  一个数据库为Master,一个数据库为slave,通过Binlog日志

  slave两个线程,一个线程去读master binlog日志,写到自己的中继日志

  一个线程解析日志,执行sql

  master启动一个线程

  给slave传递binlog日志

  半同步复制

  只有把master发送的binlog日志写到slave的中继日志,这时主库

  才返回操作完成的反馈,性能有一定降低

  并行复制

  slave 多个线程去请求binlog日志

  17.long_query怎么解决

  设置参数,开启慢日志功能,得到耗时超过一定时间的sql

  18.varchar和char的使用场景

  用来存储字符

  varchar适用字符长度经常变的

  char适用字符长度固定的

  19.数据库连接池的作用

  维护一定数量的连接,减少创建连接的时间

  更快的响应时间

  统一的管理

  20.分库分表,主从复制,读写分离

  读写分离,读从库,写主库

  spring配置两个数据库,通过AOP(面向切面编程),在写或读方法前面进行判断得到动态切换数据源。

      希望以上问题你都知道,不明白的地方,记得多学习学习。

相关文章

关键词:数据库,数据库面试题,

责任编辑:林音子

网警备案