跳到主要内容

数据库优化面试题

数据库优化

四个维度

  1. 硬件

  2. 系统配置

  3. 数据库表结构

  4. SQL及索引

MySQL全面优化,速度飞起来

优化选择


  1. 优化成本:硬件>系统配置>数据库表结构>SQL及索引;

  2. 优化效果:硬件<系统配置<数据库表结构<SQL及索引;

常见的优化方式

  1. 系统配置:

    好的硬件也需要合理的配置(如连接数配置、占用内存等),即使你的硬件服务器性能再好,但是数据库配置不合适没有充分利用完硬件性能还是没有完全发挥出硬件的优势

  2. 数据库和表结构的设计:

    数据库是用来存储数据的,数据最终是存储在磁盘的,查询数据最终是读取磁盘上的内容,所以数据库表结构的设计的好坏会影响到查询数据时磁盘的操作。

  3. SQL及索引

​ SQL优化是开发者使用最多的优化方式。

SQL及索引优化

概要

我们常见的数据库性能优化就是SQL语句优化,确实SQL优化是开发者接触到最多的也是最常有的优化手段。作为开发人员我们接触最多的也就是SQL语句的优化,SQL语句的优化除了调整SQL语句外更多的是通过添加索引来加速查询,表结构(合理设计字段、拆分字段到其它表、分表等)的优化也是我们优化的主要手段。

一 表结构优化

1 字段的数据类型

不同的数据类型的存储和检索方式不同,对应的性能也不同,所以说要合理的选用字段的数据类型。比如人的年龄用无符号的unsigned tinyint即可,没必要用integer,数字的处理速度要比字符串处理的速度更快。

2 数据类型的长度

数据库最终要写到磁盘上,所以字段的长度也会影响着磁盘的I/O操作,如果字段的长度很大,那么读取数据也需要更多的I/O, 所以合理的字段长度也能提升数据库的性能。比如用户的手机号11位长度,没必要用255个长度。

3 表的存储引擎

常用的存储引擎有MyISAM、InnoDB、Memory,不同的存储引擎拥有不同的特性,所以要合理的利用每种存储引擎的长处和优点来提供数据的性能。MyISAM不支持事务,表级锁,但是查询速度快,InnoDB支持事务,行锁。所以表的存储引擎的选择也是非常重要。

二 SQL优化

概要

MySQL性能优化的一个很重要的手段就是对SQL语句的优化。其中最重要的方式就是使用索引。

常见的优化方式

1 查询缓存

  • 查询缓存 >>> OLAP类型数据库,需要重点加大此内存缓存,但是一般不会超过GB。
  • 对于经常被修改的数据,缓存会立马失效。
  • 我们可以实用内存数据库(redis、memecache),替代他的功能

2 存储引擎层(innodb基础优化参数)

# 没有固定大小,50%测试值,看看情况再微调。但是尽量设置不要超过物理内存70%
innodb_buffer_pool_size


# 小于2G内存的机器,推荐值是20M。32G内存以上100M
innodb_additional_mem_pool_size

# 最大连接数默认为100,即使SQL语句优化的再好,硬件设备配置再高,当请求超过100时都要再等待,这就是配置不合理导致MySQL不能发挥它的最大能力。
max_user_connections

3 MySQL主从复制 读写分离

增删改操作走Master主服务器,查询走Slaver从服务器

4 使用分库分表

  1. 垂直分库分表
  2. 水平分库分表

5 SQL语句优化

  1. 避免使用select *

  2. 多表查询使用 jion 代替子查询

  3. explain 获取查询语句的执行计划 查看type字段类型

    常用的类型有: all < index(需要优化) < range< ref< eq_ref< const< system(从左到右,性能从差到好)

  4. Profiling:可以用来准确定位一条SQL的性能瓶颈

等等 可以自己去补充其它