1.大表不做数据转换
假设d表是大表,a表是小表
and a.sender=cast(d.staff_id as varchar)
改成:
and cast(a.sender as numeric)=d.staff_id
2. distinct导致没用上索引
修改:删除distinct
3.视图查询慢
视图里面查询了太多东西改成查视图里面的源表,取我们需要的字段
比如视图里面有很多子查询,但我们不需要那么多字段。
4. exists只在理论中背过?
查询语句 关联大表,但查询字段又不需要用到这个大表的
解决:把join去掉,改成exist ,这样可以把记录数降下来
select a.id ,a.name
from a
join b on a.id =b.id
left join c on b.id = c.id
改成:
select a.id ,a.name from
a
left join c on b.id = c.id
and exists( select 1 from b where a.id=b.id)
优化思路:想办法把记录数降下来
(1)多表关联,找出大表
(2)是不是需要返回大表查询字段
(3)exists真是个好东西
5.每天都有记录生成的千万级别的表,根据时间范围查询
时间字段加索引,能明显快很多
2千万以上,如果加了索引还很慢,就需要考虑加分区。