SQL优化,关联查询非常慢,前台页面控件卡顿

问题情况:可以看到发起一次8s,sql关联表比较多(历史包袱),其中一个表数据量:1172410

问题分析、原sql:基层数据含union部分,外关联了这张1百万数据表

检查各个表索引都是有的,查询始终都是8s,同样的查询逻辑每次查询都是8s,表象是没走数据库缓存

看着是有缓存的,执行计划太多(SQL文本差异、执行计划变化、子游标问题),这是一个问题

SQL优化:思路,先分页后再进行关联查询,这样不会全扫描大表(注意ROWNUM)

这样执行基本达到1s左右,但是存在分页问题,无法按照排序分页,逻辑是ROW_NUMBER()分页

这里的ROWNUM <= 40会先随机获取40条记录,然后再对这40条记录排序并分配ROW_NUMBER,这不是正确的分页逻辑

ROWNUM与ROW_NUMBER()分页的区别

关键区别

  1. 执行顺序不同

    • ROWNUM是在查询结果返回前分配的伪列,它在数据过滤后、排序前就确定了

    • ROW_NUMBER()是在排序完成后分配的序号

所以使用ROW_NUMBER后又多了2s,目前测试差2s区别

还有一种写法:Oracle 12c+的FETCH语法(最简洁高效),可惜不是12的版本

最后改造后sql:退而求其次了只能,一步一步让系统走向高效

不过整体比之前快了一倍,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值