千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:武汉千锋IT培训  >  技术干货  >  高频面试题干货-数据库优化方案

高频面试题干货-数据库优化方案

来源:千锋教育
发布人:qyf
时间: 2022-12-23 16:58:26

数据库优化方案

  一前言

  最近很多小伙伴在跳槽面试,在面试中,面试官经常会问是否熟悉数据库,数据库怎么使用?

  这些问题大家回答的都还可以,无非就是考察一些SQL语句的编写使用。

  然后面试官接着问怎么进行数据库优化?

  一些基本的优化手段,小伙伴们还是可以回答出来的,比如在编写SQL语句时,尽量不要使用like关键字,尽量避免使用or关键字等等。

  然后面试官让你回去等结果,然后就没有然后了......

  这时有小伙伴就很好奇了,为啥不给我发offer呢?于是就有粉丝来问千锋健哥了,今天健哥就为大家讲讲数据库优化的面试思路,告诉你该如何作答才能得高分!

  二面试题考点

  如果面试官是千锋健哥的话,那么我想考察的首先是候选人是否有数据库优化的整体思路。

  大家来想想,为什么要进行数据库优化呢?那肯定是数据库很慢了,所以才要优化!

  那数据库为什么会慢呢?这个原因有很多,但我们要先找到数据库的性能瓶颈,也就是变慢的主要原因;然后再针对瓶颈问题,找到具体的解决方案。

  三解题分析

  下面千锋健哥来带大家一起分析这个问题的回答思路,数据库优化按照成本与效果可以分为以下几种情况:

  SQL及索引优化,

  数据库表结构优化,

  硬件优化

  接下来健哥就分别对这几种情况进行分析讨论。

  SQL及索引优化

  SQL是我们和数据库交流最重要的部分,所以我们在调优的时候,需要花费的大量时间就在sql调优上面。常见的分析手段有慢查询日志,EXPLAIN 分析查询,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。

  1.1 慢查询

  1.1.1

  在配置文件my.cnf或my.ini中的[mysqld]行下面,加入如下两个配置参数:

  log-slow-queries=/data/mysqldata/slow-query.log

  long_query_time=3

  log-slow-queries参数为慢查询日志存放的位置,一般这个目录要有mysql的运行帐号的可写权限,一般都将这个目录设置为mysql的数据存放目录。

  long_query_time=5中的5表示查询超过五秒才记录。

  我们还可以在my.cnf或者my.ini中添加log-queries-not-using-indexes参数,表示记录下没有使用索引的查询。

  1.1.2

  我们可以通过打开log文件查看得知哪些SQL执行效率低下,从查询日志中我们可以发现查询时间超过5 秒的SQL语句,而小于5秒的没有出现在此日志中。

  如果慢查询日志中记录内容很多,可以使用mysql dump slow工具(MySQL客户端安装自带)来对慢查询日志进行分类汇总。mysql dump slow对日志文件进行了分类汇总,显示汇总后摘要结果。

  1.2 EXPLAIN执行计划分析

  EXPLAIN可以帮助开发人员分析SQL问题,EXPLAIN显示了MySQL如何使用使用SQL执行计划,可以帮助开发人员写出更优化的查询语句,我们只需要在select语句前加上Explain关键字就可以了,如下:

  EXPLAIN SELECT * FROM products

  数据库表结构优化

  尽量将表字段定义为NOT NULL约束,这时由于在MySQL中含有空值的列很难进行查询优化,NULL值会使索引以及索引的统计信息变得很复杂。

  对于只包含特定类型的字段,可以使用enum、set 等数据类型。

  数值型字段的比较比字符串的比较效率高得多,字段类型尽量使用最小、最简单的数据类型。例如IP地址可以使用int类型。

  尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED。但对整数类型指定宽度,比如INT(11),没有任何用,因为指定的类型标识范围已经确定。

  VARCHAR的长度只分配真正需要的空间

  尽量使用TIMESTAMP而非DATETIME,但TIMESTAMP只能表示1970 - 2038年,比DATETIME表示的范围小得多,而且TIMESTAMP的值因时区不同而不同。

  单表不要有太多字段,建议在20以内

  合理的加入冗余字段可以提高查询速度。

  硬件优化

  千锋健哥在服务器上一般是安装Zabbix服务器监控软件,我们通过这个软件就可以监控服务器硬盘I/O、网络I/O、CPU使用率,以及内存占用情况等信息。如果有硬件性能达到上限,则可以和公司申请升级硬件,当然这些费用是比较高的,成本比较大。

  四总结

  经过上面的分析,最后千锋健哥给大家总结数据库优化的完整答案:

  首先数据库优化的主要思路,是先找到当前数据库的瓶颈所在,然后再针对具体问题具体优化;

  由于优化成本限制,所以要考虑SQL语句及索引优化,通过慢查询日志发现项目中是哪条SQL语句导致了查询变慢;然后通过Explain执行计划分析这条要优化的SQL语句到底是哪里有问题,再进行优化;对于有索引的字段,要在查询条件中遵循最左匹配原则,确保能够命中索引;

  然后再考虑优化表结构,对于单表500万条以上数据的大表,可以进行水平分表,比如使用数据库中间件Mycat进行分表;

  最后再考虑是否是服务器硬件导致的瓶颈,可以通过Zabbix监控软件进行分析,优化服务器硬件配置。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

javascript中如何搜索数组元素

2023-03-17

ui设计之js效果-如何制作文字倒计时

2023-03-06

svn与git的区别是什么?使用git的优势是什么

2023-03-03

最新文章NEW

java异常分类三大类是什么?

2023-06-06

什么是枚举?没有枚举之前怎么做的

2023-03-17

echarts和chart的优缺点对比

2023-03-09

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>