首页 > 数据库 >【每日进步一点点系列】七道精选 数据库 实习面试题

【每日进步一点点系列】七道精选 数据库 实习面试题

时间:2023-03-18 10:32:33浏览次数:45  
标签:面试题 数据库 聚簇 查询 索引 InnoDB MyISAM 七道 数据


目录

  • ​​前言​​
  • ​​1.InnoDB和MyISAM的区别​​
  • ​​2.数据库的索引是什么结构,为什么不用哈希表?​​
  • ​​3.聚簇索引和非聚簇索引​​
  • ​​4.索引怎么实现的B+树,为什么选这个数据结构?​​
  • ​​5.MySql 的主从同步是如何实现的?​​
  • ​​6.Mysql 什么时候会进行全局扫描​​
  • ​​7.索引的优化​​

前言

   最近又到了找实习热门时间,每天坚持更新​​Java​​​实习岗位相关的面试题,不仅是自己学习总结,也为了帮助大家一起准备,每天进步一点点,坚持不懈,水滴石穿,一起拿下​​offer​​。

1.InnoDB和MyISAM的区别

​InnoDB​​是具有事务、回滚和崩溃修复能力的事务安全型引擎,它可以实现行级锁来保证高性能的大量数据中的并发操作

​MyISAM​​是具有默认支持全文索引、压缩功能及较高查询性能的非事务性引擎。

​InnoDB​​​是MySQL5.5之后的默认引擎, 行锁是通过给索引上加锁来实现的,只有通过索引条件检索数据,​​innoDB​​才使用行锁,否则,使用表锁。

从以下四个角度对比:

  • 1.事务:​​InnoDB​​​支持事务,​​MyISAM​​不支持
  • 2.数据锁:​​InnoDB​​​支持行级锁,​​MyISAM​​支持表级锁
  • 3.读写性能:​​InnoDB​​​增删改性能更优,​​MyISAM​​查询性能更优。
  • 4.全文索引:​​InnoDB​​​不支持(但可通过插件等方式支持);​​MyISAM​​默认支持。
  • 5.外键:​​InnoDB​​​支持外键,​​MyISAM​​不支持。

2.数据库的索引是什么结构,为什么不用哈希表?

​Mysql​​​的索引由​​B+​​​树实现, 哈希表的查询效率的确最高,时间复杂度 【每日进步一点点系列】七道精选 数据库 实习面试题_数据库,但是它要求将所有数据载入内存,而数据库存储的数据量级可能会非常大,全部载入内存基本上是不可能实现的; ​​​B+​​树可以分段加载需要的节点数据,可以在内存资源有限的前提下,极大提高查询效率。

3.聚簇索引和非聚簇索引

两者主要区别是数据和索引是否分离。聚簇索引是将数据与索引存储到一起,找到索引也就找到了数据;而非聚簇索引是将数据和索引存储分离开,索引树的叶子节点存储了数据行的地址。

聚簇索引:索引结果和数据一起存放的索引。 优点:聚簇索引的查询速度非常快,因为聚簇索引本身就是一个B+树,数据节点属于有序的,当定位到索引上的时候就相当于找到了数据。 缺点:更新的时候代价大,依赖有序的数据

非聚簇索引:索引结构和数据分开存放的索引。 优点:更新代价比聚簇索引小 缺点:依赖有序的数据,可能会二次回表查找

4.索引怎么实现的B+树,为什么选这个数据结构?

  1. 索引的本质就是通过预排序+树型结构来加快检索效率,而MySQL中使用InnoDB和MyISAM引擎时都使用了B+树实现索引
  2. 在二叉查找树上查找一个数据时,当出现海量数据时,查找效率将大大折扣,B+树是一棵平衡多路查找树,可以有效减少磁盘IO,同时B+树增加了叶子结点之间的连接,能保证范围查找时找到起点和终点后能快速取出需要的数据。

5.MySql 的主从同步是如何实现的?

复制(replication)是MySQL数据库提供的一种高可用高性能的解决方案,一般用来建立大型的应用。总体来说,replication的工作原理分为以下3个步骤:

  1. 主服务器(master)把数据更改记录到二进制日志(binlog)中。
  2. 从服务器(slave)把主服务器的二进制日志复制到自己的中继日志(relay log)中。
  3. 从服务器重做中继日志中的日志,把更改应用到自己的数据库上,以达到数据的最终一致性。

6.Mysql 什么时候会进行全局扫描

全表扫描,就是一条一条记录的遍历,直到表中的最后一条记录。通常情况下,对没有建立索引的表查询都是全表扫描
但是有时候表中即使有索引,如果使用不当,也会造成全表扫描。

  • 1.条件中使用了​​null​
  • 2.使用​​or​​作为连接条件
  • 3.使用了​​not in​​​或者​​in​
  • 4.使用模糊查询
  • 5.使用了​​!=​​​或者​​<>​​时
  • 6.使用​​count(*)​​时
  • 7.使用参数作为条件时

7.索引的优化

为了优化索引,我们应该合理的创建索引,比如以下情况的列适合创建索引:

  • 1.经常被查询的列
  • 2.经常用于表连接的列
  • 3.经常排序分组的列

以及创建索引时的四个不要

  • 1.选择性低的字段不创建索引(比如性别、状态等)
  • 2.很少查询的列不要创建索引
  • 3.大数据类型的字段不要创建索引
  • 4.尽量不要使用​​NULL​​值


标签:面试题,数据库,聚簇,查询,索引,InnoDB,MyISAM,七道,数据
From: https://blog.51cto.com/u_15492302/6129358

相关文章

  • 什么是数据库连接池
    每次数据库连接都要断开重连浪费时间,性能【底层需要tcp连接】  资源复用;提升系统响应速度;避免数据库连接遗漏;【长时间不操作会强制断开】  使用: ......
  • 面试题
    面试题-可变类型不可变类型-你常用的魔法方法---》某种情况会自动触发 -__init__类()--->对象进行初始化-__new__类()---->产生对象---》触发__init__完成对......
  • 嵌入式数据库-分析型数据库-DuckDB
    数据库按照是否是关系型关系型数据库可分为交易型数据库(OLTP)、分析型数据库(OLAP)和混合负载数据库(HTAP)。交易型数据库满足处理在线的实时交易事务场景,......
  • mysql-information_schema 数据库
    1概述information_schema数据库跟performance_schema一样,都是MySQL自带的信息数据库。其中performance_schema用于性能分析,而information_schema用于存储数据库......
  • 使用Navicat连接的PostgreSQL数据库
    1、切换到posgres用户:su-postgerssu-postgres#切换postgres用户psql#进入psql交互命令行\l#查看数据库列表......
  • java进阶 包装类面试题43
         ......
  • 利用Navicate查看已连接数据库密码
    一、导出链接 二、选择要查询的数据库链接三、导出文件用notepad++打开 四、解密密码在线运行代码,使用PHP在线运行工具(将上面文档的密码替换标红地方)<?phpcla......
  • 谈谈为什么要拆分数据库?有哪些方法?
    为什么要拆分数据库?数据库负载和数据量大拆分数据库是有讲究的,必须:先水平切分,然后垂直切分。什么是垂直切分?垂直切分是根据业务来拆分数据库,同一类业务的数据表拆分到......
  • .net 连接各个数据库的ConnectionString字符串
    DataType----->ConnectionStringDataType.MySql----->DataSource=127.0.0.1;Port=3306;UserID=root;Password=root;InitialCatalog=cccddd;Charset=utf8;SslMode=none......
  • AndroidStudio数据库连接有问题
    packagecom.example.daka;importandroidx.appcompat.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.EditTex......