iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >常见数据库优化面试题
  • 133
分享到

常见数据库优化面试题

数据库mysqlsql 2023-08-23 22:08:33 133人浏览 泡泡鱼
摘要

常见数据库面试题 一.在项目中如何定位慢查询 通过 druid 连接池的内置监控来定位慢 sql。通过 Mysql 的慢查询日志查看慢 SQL。通过 show processlist,查看当前数据库 SQL 执行情况来定位慢 SQL。 二


常见数据库面试题

一.在项目中如何定位慢查询

  • 通过 druid 连接池的内置监控来定位慢 sql
  • 通过 Mysql 的慢查询日志查看慢 SQL。
  • 通过 show processlist,查看当前数据库 SQL 执行情况来定位慢 SQL。

二.如何查看sql语句索引命中情况

在 SQL 语句前加上 explain,结果中的 key 就是实际用到的索引

三.说说数据库表的场景和解决方法

  1. 产生场景

    锁表通常发生在 DML( insert 、update 、delete )语句中,例如:程序 A 对 A 表的 a 数据 进行修改,修改过程中产生错误,没有 commit 也没有 rollback ,这个时候程序 B 对 A 表的 a 数据进行修改,会产生资源正忙的异常,也就是锁表。

    DDL也会引发锁表,例如在 mysql 操作一张大表,利用 alter 语句修改或新增字段的时候,恰巧有一个长事务(包括读)在操作此表,会触发修改等待,造成锁表。

  2. 原因

    当多个事务处理对多个资源同时访问时,若双方已锁定一部分资源但也都需要对方已锁定的资源时,无法在有限的时间内完全获得所需的资源,就会处于无限的等待状态,从而造成其对资源需求的死锁,导致锁表。

  3. MySQL解决办法

    • 执行SQL

      select * from infORMation_schema.processlist where command not in ('Sleep') ORDER BY time desc
    • sql 已经按照阻塞时长从大到小排序,找到耗时长的记录 id ,kill 即可:

      kill pid

四.truncate和delete的区别

delete是DML语句,truncate是DDL语句;

delete后面可以有where条件,truncate后面不能加where条件;

delete操作后,事务提交后才会生效,truncate操作后立即生效,所以truncate要比delete得执行效率高(数据量大的话就比较明显了);

delete操作后,是按行删除,原数据会放到rollback segment中,可进行回滚。truncate执行是立即生效的,不记录行删除信息,而是直接重构表,所以不能回滚;

delete执行后,会产生数据碎片,只删除数据,不会改变表空间大小。truncate执行后,数据库表会恢复至初始状态。

五.uNIOn与union all的区别

union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序;会对获取的结果进行排序操作

union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;不会对获取的结果进行排序操作

union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高

六.left join,right join inner join区别

  • LEFT JOIN 左连接,以左侧表为主,右侧表与其相匹配,匹配不上的记录 ,以null 做替补;

  • RIGHT JOIN右连接,以右侧表为主,左侧表与其相匹配,匹配不上得记录,以null做替补;

  • INNER JOIN内连接,取交集。

七.MySQL执行流程

  1. 客户端发起 SQL 查询,首先通过连接器,它会检查用户的身份,包括校验账户密码,权限,然后会查询缓存,如果缓存命中直接返回,如果没有命中再执行后续操作,但是MySQL8.0 之后已经删除了缓存功能;
  2. 接下来到达分析器,主要检查语法词法,比如 SQL 有没有写错,总共有多少关键字;要查询哪些东西;
  3. 然后到达优化器,他会以自己的方式优化我们的 SQL;
  4. 最后到达执行器,调用存储引擎执行 SQL 并返回结果。

八.MySQL语句执行顺序

from->on->join->where->group by->having->select->distinct->order by->limit

九.说说数据库设计三范式

  1. 第一范式:任何一张表都应该有自己的主键,并且每一个字段的原子性都是不可再分的。
    • 列唯一,每一个字段具有原子性不可再分;
    • 每一张表都有主键。
  2. 第二范式:在第一范式的基础上,要求所有的非主键字段完全依赖主键,不能产生部分依赖。
    • 行唯一
  3. 第三范式:在第二范式的基础上,所有非主键只能依赖于主键,不能产生传递依赖。
    • 存在外键,比如学生表中可以有班级表的主键进行关联。

十.CHAR 和 VARCHAR 的区别

char是一种固定长度的类型,无论储存的数据有多少都会固定长度,如果插入的长度小于定义长度,则可以用空格进行填充。而varchar是一种可变长度的类型,当插入的长度小于定义长度时,插入多长就存多长。

  1. char最大长度是255字符,varchar最大长度是65535个字节。
  2. char是定长的,不足的部分用隐藏空格填充,varchar是不定长的。
  3. char会浪费空间,varchar会更加节省空间。
  4. char查找效率会很高,varchar查找效率会更低。
  5. 尾部空格:char插入时可省略,varchar插入时不会省略,查找时省略。

十一.DDL,DML优化手段有哪些,批量插入

  1. DDL:在导入数据时,可以通过禁用索引来提高导入数据性能 。这个操作主要针对有数据的表,追加数据。

  2. DML:变多次事务提交为一次事务提交。批量插入

    insert into test values(1,2),(1,3),(1,4);

十二.MySQL存储引擎

  1. InnoDB存储引擎

    InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。

    • 支持事务,行锁,表锁,不支持全文索引,数据库宕机后可以恢复数据。
  2. MyISAM存储引擎

    MyISAM拥有较高的插入、查询速度,但不支持事物

    • 不支持外键,数据崩溃后无法恢复,只支持表锁。
  3. MEMORY存储引擎

    不支持事务

    表级锁定

    读写相互阻塞,写入不能读,读时不能写

    只缓存索引

    不支持外键约束

    不支持聚簇索引

    读取数据较快,占用资源少

    不支持mvcC 高并发 (多版本并发控制机制)

    崩溃恢复性较差

    mysql 5.5.5 前的默认数据引擎(show engines; 查看)

    • 不支持外键
    功 能MYISAMMemoryInnoDBArchive
    存储限制256TBRAM64TBNone
    支持事物NoNoYesNo
    支持全文索引YesNoNoNo
    支持数索引YesYesYesNo
    支持哈希索引NoYesNoNo
    支持数据缓存NoN/AYesNo
    支持外键NoNoYesNo

十三.MySQL行锁与表锁

  1. 行锁:MySQL中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁和排他锁InnoDB存储引擎默认采用行锁InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁。

    特点:行锁开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

  2. 表锁:MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MyISAM与InnoDB都支持表级锁定。表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。

    特点:表锁开销小,加锁快,无死锁,锁定粒度大,发生锁冲突的概率最高,并发最低。

十四.MySQL索引有哪些类型

  1. 普通索引:允许重复的值
  2. 唯一索引:不允许有重复的值
  3. 主键索引:数据库自动为我们的主键创建索引,如果我们没有指定主键,它会根据没有 null 的唯一索引创建主键索引,否则会默认根据一个隐藏的 rowId 作为主键索引
  4. 全文索引,用来对文本域进行索引,比如 text,varchar,只针对 MyISAM 有效

十五.索引方式有哪些

B+树和 hash,Myisam 和 innodb 都不支持 hash。

十六.索引失效的情况有哪些

  1. like 以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效。
  2. or语句前后没有同时使用索引。
    • 当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效
  3. 组合索引,不是使用第一列索引,索引失效。
  4. 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
    • 数据类型出现隐式转化。如varchar不加单引号的话可能会自动转换为int型,使索引无效,产生全表扫描。
  5. 在索引列上使用 IS NULL 或 IS NOT NULL操作。
    • 索引是不索引空值的,所以这样的操作不能使用索引
  6. 在索引字段上使用not,<>,!=。
    • 不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。 优化方法: key<>0 改为 key>0 or key<0。
  7. 对索引字段进行计算操作、字段上使用函数。
  8. 当全表扫描速度比索引速度快时,mysql会使用全表扫描,此时索引失效。
    • 如果mysql估计使用全表扫描要比使用索引快,则不使用索引

十七.MySQL索引的数据结构,B+树的特点

  1. 数据结构:B+树,HASH。
  2. 特点
    • 非叶子节点仅具有索引作用,也就是说,非叶子节点只能存储Key,不能存储value
    • 树的所有叶节点构成一个有序链表,可以按照key排序的次序依次遍历全部数据。

十八.MySQL主从复制原理

  1. 主要依靠 binlog 来实现的,它记录的是所有的 DDL,DML,TCL 操作
  2. 当主库的数据发生改变时,会将改变记录保存到 binloga2 中
  3. 主库新开一个线程将 binlog 内容发送到从库
  4. 从库会发起一个 I/O 线程请求主库的 binlog,并保存到中继日志中
  5. 从库新开一个 SQL 线程,读取中继日志并解析成具体操作,从而将主库更新的内容写到了从库中

十九.集群模式有哪些,分别有什么优缺点?

  1. 主从复制:一主一从,一主多从,主负责读写,从只能读,一对一或一对多关系。
  2. 哨兵模式:基于主从模式,哨兵实际上是一个单独进程,用来监听主服务是否宕机,如果宕机则将从转为主,并且通知其他的服务器修改配置文件,让它们切换主机。哨兵模式也可配置多哨兵,多哨兵之间互相监控。
  3. 集群模式:集群是将应用复制成多个相同应用,分散在不同服务器,每个服务器都独立运行相同的代码,可以分散服务器压力解决高并发问题,同时也能预防单点节点故障,就是一台服务器故障并不影响其他服务器正常运行,但没有解决单体应用代码臃肿,业务复杂,维护性差等问题。

来源地址:https://blog.csdn.net/qq_49195366/article/details/128192350

您可能感兴趣的文档:

--结束END--

本文标题: 常见数据库优化面试题

本文链接: https://www.lsjlt.com/news/378915.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 常见数据库优化面试题
    常见数据库面试题 一.在项目中如何定位慢查询 通过 druid 连接池的内置监控来定位慢 SQL。通过 MySQL 的慢查询日志查看慢 SQL。通过 show processlist,查看当前数据库 SQL 执行情况来定位慢 SQL。 二...
    99+
    2023-08-23
    数据库 mysql sql
  • MySQL数据库常见面试题有哪些
    本篇内容主要讲解“MySQL数据库常见面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库常见面试题有哪些”吧!1、数据库的常用范式:第一...
    99+
    2024-04-02
  • 常见的SQL优化面试专题大全
    目录介绍:问:比如,现在有个面试官说,现在线上有个SQL执行很慢,你怎么优化?问:慢 SQL 语句的几种常见诱因?问:平时写SQL时该注意什么?有什么经验可谈?问:有哪些影响数据库性能的瓶颈?问:改善SQL性能涉及哪些步...
    99+
    2023-03-03
    sql优化面试题及答案 sql调优的几种方式 mysql优化面试题及答案
  • 常见的SQL优化面试题有哪些
    本篇内容介绍了“常见的SQL优化面试题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!介绍:无论您是创...
    99+
    2023-03-10
    sql
  • 常见的Java中数据结构面试题
    常见的Java中数据结构面试题?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。栈和队列的共同特点是(只允许在端点处插入和删除元素)4.栈通常采用的两种存储结构是(线性存储结构...
    99+
    2023-05-31
    java 数据结构 ava
  • RocketMq常见面试题
    目录 1、RocketMQ Broker中的消息被消费后会立即删除吗?2、RocketMQ消费模式有几种?3、消费消息是push还是pull?4、broker如何处理拉取请求的? ----??...
    99+
    2023-09-03
    java-rocketmq rocketmq java
  • PHP常见面试题
    一. 基本知识点 1.1 HTTP协议中几个状态码的含义:503 500 401 403 404 200 301 302。。。 200 : 请求成功,请求的数据随之返回。 301 : 永久性重定向。 302 : 暂时行重定向。 401 : ...
    99+
    2023-09-04
    php 服务器 开发语言
  • 大数据常见的面试题有哪些
    这篇“大数据常见的面试题有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“大数据常见的面试题有哪些”文章吧。  1、hea...
    99+
    2023-06-02
  • Vue.js 常见面试题
    什么是SPA?SAP意思是 单页面应用 。SPA 是一种应用程序,它提前下载好布局,并让页面在不同布局之间切换进而无需刷新就可以渲染整个页面。与此特点相对的,它将会从服务器中获取必要信息并替换页面中对应的内容。什么是 Vue 指令Vue 指...
    99+
    2024-04-02
  • JavaScript数据结构常见面试问题整理
    目录1.JS有哪些数据类型有什么区别2.数据类型检测的方式3.判断是否是数组的方法4.null和undefined的区别5.手写instanceof方法6.为什么0.1+0.2 !=...
    99+
    2022-11-13
    JavaScript 数据结构 JavaScript 数据结构面试问题
  • Java常见的面试题
      1)Java 中能创建 volatile 数组吗  能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线...
    99+
    2023-06-03
  • 常见的PHP面试题
    这篇文章将为大家详细讲解有关常见的PHP面试题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。通过哪一个函数,可以把错误转换为异常处理?A:set_error_handlerB:error_r...
    99+
    2023-06-15
  • Java常见面试题:java面试笔记
    基本数据类型有哪些?基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空...
    99+
    2023-06-02
  • 分享JavaScript常见面试题
    这篇文章主要讲解了“分享JavaScript常见面试题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分享JavaScript常见面试题”吧!一、请解释 Ja...
    99+
    2024-04-02
  • java常见面试题(160道)
    1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。JRE:Java Runtime Environment 的简称,Java 运行...
    99+
    2023-09-12
    java 开发语言 面试
  • 常见的Java面试问题
    JVMJava虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。什么是字节码采用字节码的好处是什么在 Java 中,J...
    99+
    2023-06-03
  • 常见的java string面试题
    常见的java string面试题?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、...
    99+
    2023-06-14
  • java面试常见问题---ConcurrentHashMap
    1、请你描述一下ConcurrentHashMap存储数据结构是什么样子呢? ConcurrentHashMap 内部的 map 结构和 HashMap 是一致的,都是由:...
    99+
    2024-04-02
  • JS常见面试试题有哪些
    这篇文章主要介绍了JS常见面试试题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:JavaScript面试题总结1,首先是数组...
    99+
    2024-04-02
  • 【08期】ArrayList常见面试题
    简介 ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高。 线程安全性 对Arr...
    99+
    2023-08-30
    后端
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作