SQL总结

一、SQL优化

  • 尽量用到索引
  • 尽量不要使用distinct语法
  • 列裁剪,只有需要用到的列才进行输出
  • 尽早过滤数据,减少每个阶段的数据量
  • join时,尽量把小表放在前面,大表放后面
  • 尽量不要用order by

1、尽量用到索引

select * from character_login 
应改成:
select * from character_login where dt='20210312'

select a.* from a join b
on a.dt='20210312'  and a.dt=b.dt and a.id=b.id
"a.dt=b.dt"是关联条件,索引没有起作用。应改成:
select a.* from a join b
on a.dt='20210312'  and b.dt='20210312' and a.id=b.id

2、尽量不使用distinct(尤其是大数据量下)

因为Distinct函数都会导致对最终结果集完成一次排序,因此,这就成为成本最昂贵的排序之一.

select distinct id from character_login where dt='20210312'
应改成:
select id from character_login 
where dt='20210312' 
group by id


select game_id,count(distinct character_id) 
from character_login 
where dt='20210312' 
group by game_id
应改成:
select game_id,count(1) 
from 
(
    select game_id,character_id
    from character_login 
    where dt='20210312' 
    group by game_id,character_id
)
group by game_id

3、列裁剪

查询时只有需要用到的列才进行输出。
原因:
在大数据量多字段的数据表中,如果使用 SELECT * 方式去查询数据,会造成很多无效数据的处理,会占用程序资源,造成资源的浪费。

4、谓词下推,尽早进行数据过滤

5、Join顺序

小表在前,大表在后

6、如无必要,别用order by(尤其大数据量下)

小表在前,大表在后

你可能感兴趣的:(SQL总结)