求助一个SQL的性能优化问题!
时间:2011-11-30
来源:互联网
我对一个处理程序进行性能分析,使用SQL*TRACE 和 Tkprof 跟踪了这个程序的执行过程,
在生成的文件中截取了如下的片段:(还有类似的几个SQL,表现差不多)
********************************************************************************
select * from base_table1
where crdtype = 0 and crdsvrsvd = 'TCADF' and
( crdsldate like '%23' or crdsldate like '%00' or
crdsldate like '%00' or crdsldate like '%00' )
and crdsldate <> '20120123'
and (crdstate = 0 or crdstate = 10)
union all
select * from base_table2
where crdtype = 0 and crdsvrsvd = 'TCADF' and
( crdsldate like '%23' or crdsldate like '%00' or
crdsldate like '%00' or crdsldate like '%00' )
and crdsldate <> '20120123'
and (crdstate = 0 or crdstate = 10)
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.01 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 26022 12.32 369.68 79390 162211 0 52041
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 26024 12.32 369.70 79390 162211 0 52041
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 23
Rows Row Source Operation
------- ---------------------------------------------------
52041 UNION-ALL
2 PARTITION HASH ALL PARTITION: 1 4
2 TABLE ACCESS BY LOCAL INDEX ROWID BASE_TABLE1 PARTITION: 1 4
46 INDEX RANGE SCAN TCARD_ACTCRDTYPE_SLPRSVD PARTITION: 1 4 (object id 458716)
52039 PARTITION HASH ALL PARTITION: 1 4
52039 TABLE ACCESS BY LOCAL INDEX ROWID BASE_TABLE2 PARTITION: 1 4
2209311 INDEX RANGE SCAN TCARD_SLPCRDTYPE_SLPRSVD PARTITION: 1 4 (object id 458721)
********************************************************************************
我感觉如上结果中的各字段值太大了……,是不是有问题啊,请高手指点一下!
另外,base_table1和base_table2是两张结构相同的表,我在crdtype和crdsvrsvd字段建立了复合索引。
在生成的文件中截取了如下的片段:(还有类似的几个SQL,表现差不多)
********************************************************************************
select * from base_table1
where crdtype = 0 and crdsvrsvd = 'TCADF' and
( crdsldate like '%23' or crdsldate like '%00' or
crdsldate like '%00' or crdsldate like '%00' )
and crdsldate <> '20120123'
and (crdstate = 0 or crdstate = 10)
union all
select * from base_table2
where crdtype = 0 and crdsvrsvd = 'TCADF' and
( crdsldate like '%23' or crdsldate like '%00' or
crdsldate like '%00' or crdsldate like '%00' )
and crdsldate <> '20120123'
and (crdstate = 0 or crdstate = 10)
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.01 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 26022 12.32 369.68 79390 162211 0 52041
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 26024 12.32 369.70 79390 162211 0 52041
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 23
Rows Row Source Operation
------- ---------------------------------------------------
52041 UNION-ALL
2 PARTITION HASH ALL PARTITION: 1 4
2 TABLE ACCESS BY LOCAL INDEX ROWID BASE_TABLE1 PARTITION: 1 4
46 INDEX RANGE SCAN TCARD_ACTCRDTYPE_SLPRSVD PARTITION: 1 4 (object id 458716)
52039 PARTITION HASH ALL PARTITION: 1 4
52039 TABLE ACCESS BY LOCAL INDEX ROWID BASE_TABLE2 PARTITION: 1 4
2209311 INDEX RANGE SCAN TCARD_SLPCRDTYPE_SLPRSVD PARTITION: 1 4 (object id 458721)
********************************************************************************
我感觉如上结果中的各字段值太大了……,是不是有问题啊,请高手指点一下!
另外,base_table1和base_table2是两张结构相同的表,我在crdtype和crdsvrsvd字段建立了复合索引。
作者: my_frank 发布时间: 2011-11-30
79390 从磁盘读取量比较大,执行计划都走了索引了,
作者: java3344520 发布时间: 2011-12-01
复合索引 是怎么建立的
crdtype和crdsvrsvd字段 筛选的强度谁更大一些 就是各自筛选出来的结果总数 占总行数的比重谁大
crdtype和crdsvrsvd字段 筛选的强度谁更大一些 就是各自筛选出来的结果总数 占总行数的比重谁大
作者: lxpbs8851 发布时间: 2011-12-01
不同的值更多 不好意思
作者: lxpbs8851 发布时间: 2011-12-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28