今天谈谈 MySQL 的调优问题,比较偏项目实战。面试中也喜欢问 “xxx如何优化”的问题,这类问题相对开放,一不小心就变成了送命题,但是风险与机遇并存,假如你能理论结合项目经验给出一个漂亮的回答,让面试官眼前一亮,那么马上你就脱颖而出了。

下面我给出了几个面试中常问的问题,你可以结合你的项目经验,一起来试试如何回答这类问题。

1. 日常是怎么优化 SQL 的?

通过慢查询日志、EXPLAIN 分析查询、show profile 分析、以及 show 命令查询系统状态及系统变量。

Mysql> show status   ——显示状态信息(扩展show status like "XXX")Mysql> show variables   ——显示系统变量(扩展show variables like 'XXX')Mysql> show innodb status ——显示InnoDB存储引擎的状态Mysql> show processlist ——查看当前SQL执行,包括执行状态、是否锁表等Shell> mysqladmin variables -u username -p password ——显示系统变量Shell> mysqladmin extended-status -u username -p password ——显示状态信息

2. SQL 优化的一般步骤,如何定位性能瓶颈?

先分析数据库系统资源是否达到瓶颈,如:平均负载、CPU、I/O 次数、连接数、QPS 吞吐量。

如果是查询性能问题,则优先看是否有慢查询,频繁查询的字段是否有建立索引,是否索引实效导致全表扫描,索引是否过大导致查询效率降低,表数据量是否过大(需要分库分表) 等等。

3. 索引优化有哪些方法?

用短小的数字类型做主键,而不是过长的 varchar 类型

查询条件尽量覆盖索引,全值匹配 > 最左前缀 > 范围查询

字符串不加单引号会导致索引失效

少用 or,用它来连接时会索引失效

,>=,BETWEEN,IN 可用到索引;<>,not in ,!= 则不行,会导致全表扫描

is null ,is not null 也无法使用索引

4. 主键使用 UUID 和自增主键有什么区别?

UUID 是字符串,比整型消耗更多的存储空间

在 B+ 树中查找时需要跟经过的节点值比较大小,整型数据的比较运算比字符串更快速

自增的整型索引在磁盘中会连续存储,在读取一页数据时也是连续的,UUID 是随机产生的,读取上下两行数据是分散的,不适合范围查找

在插入和删除数据时,整型自增主键会在叶子节点的末尾建立新的叶子节点,不会破坏左测子树的索引结构,UUID 主键的插入或删除大部分情况要使索引进行重建,导致性能下降

5. MySQL 如何对大表(千万/亿级)做优化?

优化顺序:

优化 SQL 语句和索引

对频繁查询的数据进行缓存

对数据库进行主从复制,读写分离,从库可以使用 MyISAM,查询效率会更高

对表进行分区,SQL 条件中需要带上做分区的列,可以使查询定位到少量的分区上,查询会比较快,如果每用到分区的列会扫描全部分区

垂直拆分,对大表拆分成小表

水平拆分,将数据分片,拆分到其他表或数据库上

6. 分区、分表、分库有什么作用?

逻辑数据分割

提高单一的写和读应用速度

提高分区范围读查询的速度

分割数据能够有多个不同的物理文件路径,避免单目录或单文件过大

高效的保存历史记录

便于磁盘清理

7. 如何分区、分表、分库?

分区:

RANGE 分区

LIST 分区

HASH 分区

KEY 分区

分表:

范围分表

哈希取余分表

分库:

业务分库,垂直分库。

8. MySQL 如何实现高可用?

实现高可用的手段主要是数据备份和失效转移机制。

MySQL 采用 Master-Slave 同步机制,通过主从复制的方式实现数据的热备。

失效转移需要从应用层面实现,如对服务器进行心跳检测,或通过应用程序访问失败的报告来判断失效,控制中心判断失效之后对服务进行切换,MySQL 如果做了主主备份,那么就切换到备份的主库上。

9. MySQL 主从复制的原理?

MySQL 主从复制主要涉及三个异步线程:

binlog 线程:负责将主服务器上所有的更改操作写入到二进制日志中(binary log)

I/O 线程:负责从主服务器上读取二进制的日志,并写入到从服务器的中继日志中(Relay log)

SQL 线程:负责读取中继日志,解析出主服务器已经执行的数据更改操作,并在 Slave 机器上重放

10. MySql 读写分离的作用?

读写分离:主服务器负责处理写操作和对数据实时性要求比较高的读操作,从服务器只负责处理读操作。

读写分离主要有以下几个作用:

提高读写的性能,由于主从服务器负责各自的读写,极大程度缓解了锁的争用

从服务器可以使用 MyISAM 存储引擎,提升查询性能,节约系统开销

增加了服务器冗余,提高可用性

猜你喜欢:

mysql数据库调优 面试_面试-MySQL篇:数据库调优相关推荐

  1. mysql高级查询面试_高级MySQL数据库面试问题 附答案

    因为有大家的支持,我们才能做到现在,感谢你们这一路上对我们的支持.在这篇文章中,我们将主要针对MySQL的实用技巧,讲讲面试中相关的问题. 1. 如何使用SELECT语句找到你正在运行的服务器的版本并 ...

  2. mysql update 几万 非常慢_面试官:谈谈你对mysql索引的认识?

    引言 大家好,我渣渣烟.我曾经写过一篇<面试官:讲讲mysql表设计要注意啥>,当时写完后,似乎效果还行! 于是呢,决定再来一个mysql的数据库专题,这篇我们就来谈谈关于索引方面的mys ...

  3. mysql 事务值被改变_面试被问MySQL 事务的实现原理,怎么破?

    Java面试笔试面经.Java技术每天学习一点 作者:小小木的博客 来源:https://www.cnblogs.com/wyc1994666/ 开篇 相信大家都用过事务以及了解他的特点,如原子性(A ...

  4. mysql sql语句优化面试_面试不要一把梭了,这才是SQL优化的正确姿势

    全文内容预览: 所以,在开始之前(MySQL 优化),咱们先来聊聊性能优化的一些原则. 性能优化原则和分类 性能优化一般可以分为:主动优化 被动优化 所谓的主动优化是指不需要外力的推动而自发进行的一种 ...

  5. mysql编写完怎么执行_面试官:一条MySQL更新语句是如何执行的?

    在面试中面试中如果被面试官问到在MySQL中一条更新语句是怎么执行的?,下面让我们来探究一下! 流程图 这是在网上找到的一张流程图,写的比较好,大家可以先看图,然后看详细阅读下面的各个步骤. 执行流程 ...

  6. mysql 存储引擎 面试_面试官:你用过mysql哪些存储引擎,请分别展开介绍一下

    这是高级开发者面试时经常被问的问题.实际我们在平时的开发中,经常会遇到的,在用SQLyog等工具创建表时,就有一个引擎项要你去选.如下图: Mysql的存储引擎有这么多种,实际我们在平时用的最多的莫过 ...

  7. mysql是如何管理数据_【MySQL】如何管理数据库

    MySQL作为一款数据库管理系统(DataBase Management System,DBMS)软件,可以管理多个数据库.本文,主要讲述如何对一个数据库进行一系列的"增.删.改.查&quo ...

  8. mysql数据应用从入门_《MySQL数据库应用从入门到精通》

    第1章 数据库概述 1.1基本概念 1.1.1数据库技术发展阶段 人工管理阶段-->文件系统阶段-->数据库系统阶段 1.1.2涉及的概念 数据库(DB).数据库管理系统(DBMS).数据 ...

  9. MySQL数据库实用教程考核_《MySQL数据库实用教程》郑明秋,蒙连超,赵海侠【pdf】...

    内容简介 郑明秋.蒙连超.赵海侠主编的<MySQL数据库实用教程>是作者在多年的数据库开发实践与教学经验的基础上,根据计算机相关专业的职业岗位能力需求及学生的认知规律倾心组织编写的.本教材 ...

  10. MySQL数据库test连接语句_【MySQL数据库开发之二】MySQL 基础语句的书写与操作!...

    本篇Himi简单介绍一些MySQL数据库的基础操作: 注:mysql 语句对大小写不敏感,语句以分号";"标识语句结束: 1.   首先使用两个简单的查询语句: 查询当前版本:se ...

最新文章

  1. python矩阵运算_Python矩阵常见运算操作实例总结
  2. 超大数据量存储常用数据库分表分库算法总结
  3. 2017/Province_C_C++_B/2/等差素数列
  4. nbu还原oracle,NBU恢复oracle
  5. 多线程 java 实例_Java多线程实例学习
  6. mysql单台跨数据库查询_在MySQL中怎样进行跨库查询?
  7. 层内容被FLASH遮挡解决办法
  8. 程序路径查找 找到指定程序所在的目录
  9. Sonar6.0应用之四:与Jenkins集成分析(Scanner+Maven)
  10. mysql 事务sql_mysql存储过程之事务篇
  11. 基于HMM的连续小词量语音识别 - 模拟技术 - 电子发烧友网
  12. 企业管理的实质和核心是人的管理
  13. MyEclipse配置Tomcat7
  14. 【小笔记】大数据量excel解析工具性能对比
  15. CocosCreator downlevelIteration 允许迭代器进行迭代
  16. 金融交易报文ISO8583协议
  17. 如何访问原来Vue2官网?
  18. Mac M1芯片Android Studio使用模拟器
  19. 红宝书初步研读随手笔记
  20. nested exception is java.lang.NoSuchMethodError

热门文章

  1. 大白话5分钟带你走进人工智能-第十二节梯度下降之背后的原理之泰勒公式(7)
  2. python用于pmc排产可以吗_PMC-你最想要的实用干货来了!
  3. matlab ellip传递函数,BPSK和QPSK调制解调原理及MATLAB程序
  4. CentOS 7下安装达梦8开发版
  5. Python:计算分位数、获取分位数的索引(自定义位置,附完整代码)
  6. broadcastreceiver全面详解
  7. OD调试3--reverseMe
  8. docker部署机器学习/深度学习模型的容器化方案
  9. FTK应用程序编程接口(API)手册-2
  10. htc+one+m7+linux驱动,HTC One(M7)的驱动下载