sql深度优化

sql优化是一个大家都比较关注的热门话题,无论在面试,还是工作中,都很有可能会遇到。

如果某天负责的某个线上接口,出现了性能问题,需要做优化。那么你首先想到的很有可能是优化sql语句,因为它的改造成本相对于代码来说也要小得多。

本篇就来详细描述一下sql优化

1.避免使用select

很多时候,我们写sql语句时,为了方便,喜欢直接使用select *,一次性查出表中所有列的数据

反例:

select * from user where id=1;

在实际业务场景中,可能我们真正需要使用的只有其中一两列。查了很多数据,但是不用,白白浪费了数据库资源,比如:内存或者cpu。

此外,多查出来的数据,通过网络IO传输的过程中,也会增加数据传输的时间。

还有一个最重要的问题是: select不会走覆盖索引,会出现大量的回表操作,而从导致查询sql的性能很低。

正确优化sql语句:

select name,age from user where id=1;

2.用union all代替union

我们都知道sql语句使用union关键字后,可以获取排重后的数据。而如果使用union all关键字,可以获取所有数据,包含重复的数据

反例:

(select * from user where id=1) 
union 
(select * from user where id=2);

排重的过程需要遍历、排序和比较,它更耗时,更消耗cpu资源。所以如果能用union all的时候,尽量不用union。

优化后的代码:

(select * from user where id=1) 
union all
(select * from user where id=2);

3.小表驱动大表

小表驱动大表,也就是说用小表的数据集驱动大表的数据集。

假如有order和user两张表,其中order表有10000条数据,而user表有100条数据。时如果想查一下,所有有效的用户下过的订单列表。可以使用in关键字实现

select * from order
where user_id in (select id from user where status=1)

也可以使用exists关键字实现

select * from order
where exists (select 1 from user where order.user_id = user

这样使用的原因:

因为如果sql语句中包含了in关键字,则它会优先执行in里面的子查询语句,然后再执行in外面的语句。如果in里面的数据量很少,作为条件查询速度更快。

而如果sql语句中包含了exists关键字,它优先执行exists左边的语句(即主查询语句)。然后把它作为条件,去跟右边的语句匹配。如果匹配上,则可以查询出数据。如果匹配不上,数据就被过滤掉了。

这个需求中,order表有10000条数据,而user表有100条数据。order表是大表,user表是小表。如果order表在左边,则用in关键字性能更好。

总结一下:

in 适用于左边大表,右边小表。 exists 适用于左边小表,右边大表。 不管是用in,还是exists关键字,其核心思想都是用小表驱动大表。

祝大家在新的一年里面心想事成 杨帆启航!!!

好了 本篇文章就到这里结束了 在这里我想向大家推荐一个课程:

https://xxetb.xetslk.com/s/2PjJ3T

相关推荐

  1. sql深度优化

    2024-02-15 16:22:04       35 阅读
  2. <span style='color:red;'>Sql</span><span style='color:red;'>优化</span>

    Sql优化

    2024-02-15 16:22:04      27 阅读
  3. SQL优化

    2024-02-15 16:22:04       27 阅读
  4. SQL优化

    2024-02-15 16:22:04       20 阅读
  5. sql优化

    2024-02-15 16:22:04       12 阅读
  6. <span style='color:red;'>SQL</span><span style='color:red;'>优化</span>

    SQL优化

    2024-02-15 16:22:04      9 阅读
  7. SQL 优化

    2024-02-15 16:22:04       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-15 16:22:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-15 16:22:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-15 16:22:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-15 16:22:04       18 阅读

热门阅读

  1. 【算法】树状数组和线段树

    2024-02-15 16:22:04       29 阅读
  2. 判断能否形成等差数列

    2024-02-15 16:22:04       34 阅读
  3. 2/13作业

    2024-02-15 16:22:04       30 阅读
  4. 探索XGBoost:自动化机器学习(AutoML)

    2024-02-15 16:22:04       34 阅读
  5. USACO 2024 Jan B题解

    2024-02-15 16:22:04       36 阅读
  6. Redis的哨兵系统

    2024-02-15 16:22:04       21 阅读
  7. ARIMA时间序列

    2024-02-15 16:22:04       31 阅读