建分区表索引优化SQL
2015-10-27 00:11
363 查看
SQL 优化的 分类早就有了, 就是碰不到 优化的典型例子, 今天遇到一个.......
页面上面的SQL :
select count(*)
from taba.npai, dm_area da
where npai.local_area_id = 3
and npai.area_id = da.area_id
第一次跑 65s 让人忍受不了
简单看下执行计划, 忘记搞出来了, 大致知道内容。 taba 的local_area_id 表作为 list 分区, 分区中大概有 2千万数据, 看了一个 segements 大概 2.5G好像。
谓词过滤条件为 da.area_id , 大概91 条数据, 主要 dm_area 的影响, dm_area 表正好为 参数表, area_id 对应一条数据,
于是优化SQL 思路有了,考察了 area_id 列, 发现最适合建的索引 create bitmap index idx_area_id on tab (area_id,0) local;
select /*+ index(npai, idx_area_id) */ count(1) from taba npai, dm_area da
where npai.local_area_id = 3 and npai.area_id = da.area_id ---- 结果好像是 5秒
一看还有地方 可以改进
select /*+ index(npai, idx_area_id) */ count(1) from taba npai where npai.local_area_id = 3
and exists ( select 1 from dm_area da where npai.area_id = da.area_id); --- 0.017s
最终定型
页面上面的SQL :
select count(*)
from taba.npai, dm_area da
where npai.local_area_id = 3
and npai.area_id = da.area_id
第一次跑 65s 让人忍受不了
简单看下执行计划, 忘记搞出来了, 大致知道内容。 taba 的local_area_id 表作为 list 分区, 分区中大概有 2千万数据, 看了一个 segements 大概 2.5G好像。
谓词过滤条件为 da.area_id , 大概91 条数据, 主要 dm_area 的影响, dm_area 表正好为 参数表, area_id 对应一条数据,
于是优化SQL 思路有了,考察了 area_id 列, 发现最适合建的索引 create bitmap index idx_area_id on tab (area_id,0) local;
select /*+ index(npai, idx_area_id) */ count(1) from taba npai, dm_area da
where npai.local_area_id = 3 and npai.area_id = da.area_id ---- 结果好像是 5秒
一看还有地方 可以改进
select /*+ index(npai, idx_area_id) */ count(1) from taba npai where npai.local_area_id = 3
and exists ( select 1 from dm_area da where npai.area_id = da.area_id); --- 0.017s
最终定型
相关文章推荐
- 将mysql数据库中的数据转入sql server中
- 复制分发数据库
- MongoDB正则表达式及应用
- SQL SERVER 2014 安装图解教程(含SQL SERVER 2014下载)
- mac系统OS X10.10版本安装最新5.7.9mysql的方法
- Oracle归档日志写满(ora-00257)了怎么办
- 动态sql
- ShardedJedisPool详解
- Oracle Weblogic 重置密码的方法
- kali——安装chrome
- MySQL的configure参数详解
- Memcached使用与实践
- Memcached与Memcache区别
- Redis配置文件详解
- Redis使用与实践
- 数据库分片策略
- MySQL安装(转)
- SQL语句积累
- 关系数据库SQL语言简介
- sqlie3 Replace into