SQL中常见的优化

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

你可能感兴趣的:(SQL,sql,数据库)