面试官:如何进行SQL优化

SQL优化就三个重点

  • 最大化利用索引
  • 尽可能避免全表扫描
  • 减少无效数据的查询

SQL优化仅仅适用于数据量较大的情况下,如果数据量比较小,不一定以此为准

首先开启数据库慢查询日志,单位到查询效率比较低的sql,找到对应的SQL语句并进行分析

1. 表设计是否规范,是否符合三范式的标准
a. 第一范式:保证原子性(不可拆分)
b. 第二范式:每张表都有主键
c. 第三范式:每一列都有主键相关

重构表结构,成本太大,考虑三范式只是一个方向,并不符合实际开发环境中的SQL优化

2. 查看数据表中是否存在大量冗余字段,字段数据类型是否合理

3. 尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表查询

4. 尽可能使用varchar代替char建表数据类型,能用数值绝对不用字符存储
varchar是可变长度,可以节省空间
使用字符的话数据在比对时会一个字符一个字符的拆分比对,而数值类型只用比对一次即可

5. 尽量避免null值,使用默认值代替空值,数值可以使用0,字符型可以使用空字符串
a. null值判断会导致数据库放弃索引进行全表扫描

6. 查看SQL语句是否规范
a. 避免使用关键字:or,in,not in,!=,<>,避免使用select *
b. 使用in和not in会导致引擎走全表查询,如果是联系数值可以使用between
c. 尽量避免子查询,大部分子查询都可以连接查询
d. 用or的地方可以使用union去代替实现
ⅰ. or会导致数据库引擎放弃索引进行全表扫描
e. 用in的地方可以使用exists去代替
f. order by 条件要与where条件一致,否则order by 不会利用索引进行排序
g. 多表查询时,小表在前,大表在后

7. 分析sql索引是否可以用上
a. explain查询sql的执行计划,重点关注的几个类就是,type是不是全表扫描
b. 看一下索引是否能够用上,主要看key使用哪个索引
c. 看一下rows扫描的行数是不是很大

猜你喜欢

转载自blog.csdn.net/qq_45779998/article/details/127954343