面试官:如何进行SQL优化

本文介绍SQL性能优化的七大要点,包括最大化利用索引、避免全表扫描等,并提供了具体的操作建议,如使用varchar代替char、避免使用or和in等关键字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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扫描的行数是不是很大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肉蟹宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值