问题背景
在Oracle 10.1.0环境中,一个看似简单的SQL查询却出现了令人头疼的性能问题:
-- 无排序查询:1秒完成 select * from table; -- 按日期排序查询:竟需要18秒! select * from table order by date_report desc;
表数据量约20万条,客户无法接受这样的响应速度。
问题分析
第一阶段:常规优化
首先想到的是为date_report字段创建索引:
CREATE INDEX idx_date_report ON table_name(date_report);
然而,令人失望的是,索引创建后查询速度并没有明显改善。
第二阶段:深入排查
通过检查Oracle参数配置,发现了关键线索:
-- 查看排序区域大小 SQL> show parameter sort_area_size; NAME TYPE VALUE -------------------- ------- ------------------------------ sort_area_size integer 65536 -- 查看工作区策略 SQL> show parameter workarea_size_policy; NAME TYPE VALUE -------------------- ------- ------------------------------ workarea_size_policy string AUTO
问题根源:
-
sort_area_size只有64KB,对于20万条记录的排序来说确实太小 -
workarea_size_policy设置为AUTO
Oracle排序性能优化实战

最低0.47元/天 解锁文章
1274

被折叠的 条评论
为什么被折叠?



