SQL中常见的优化

本文介绍了几种IT技术中提升数据库查询效率的方法,如避免全表查询,使用unionall去重,小表驱动大表,批量插入,limit1的使用,分页处理,连接查询替代子查询,以及合理运用groupby以降低资源消耗。
摘要由CSDN通过智能技术生成
1、可以尽量的避免使用select进行全表查询

例如在查询表中数据的时候,尽量不要使用*进行一个全表查询。

2、使用union all 代替union

在使用的时候,union all 会自动的对重复的数据进行去重,从而可以减少cpu资源的占用。

3、使用小标驱动大表

小标驱动大表指的是使用小表的数据集来驱动大表的数据集。

假设此时有order表与user表,其中order表中数据越有10000条,user表中的数据大概在100条数据,此时在查询所有有效用户下过的列表订单,可以使用in关键字来实现

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

也可以通过exists关键字来实现:

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

in 是用于左边是大表,右边是小表

exists是用于左边是小表,右边是大表

4、批量操作

假设在向一张表中插入数据的时候,可以进行批量插入数据。

5、多使用limit 1

在做查询的时候,有时候的需求是查询数据中的第一条数据,此时就可以按照某个字段按照某种顺序进行排序,通过limit 1取出第一条数据。

6、高效的分页

在列表中查询数据的时候,为了避免一次性返回过多的数据从而印象接口性能,此时就可以对查询接口做分页处理。

7、使用连接查询替代子查询

在使用子查询的时候使用到关键字in,执行的逻辑是先执行内部的语句,在内部sql语句的结果的基础上在做查询。

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

但是改成连接查询时语句消耗较低:

select o.* from order o
inner join user u on o.user_id = u.id
where u.status=1
8、join的表不宜过多

一般join的表的数量大概在三张左右。

9、提高group by的效率

在许多的场景会使用到group by关键字,他的主要的功能就是去重和分组

例如:

当需求中先分组再过滤时,消耗的资源会比较大,此时可以先过滤在进行分组。

先进行分组后使用having进行过滤,此时执行的逻辑是先进行分组在进行过滤分组本身就需要消耗资源

select user_id,user_name from order
group by user_id
having user_id <= 200;


所以可以先进行缩小范围在分组:

select user_id,user_name from order
where user_id <= 200
group by user_id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值