楼主: kangaroo76

这条SQL语句如何优化?

[复制链接]
招聘 : 数据库管理员
论坛徽章:
66
ITPUB元老
日期:2005-07-16 18:49:11授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44现任管理团队成员
日期:2011-05-07 01:45:08版主3段
日期:2012-05-15 15:24:11
11#
发表于 2005-2-4 10:13 | 只看该作者

Re: sort_area_size的大小是1m,多大合适

最初由 kangaroo76 发布
[B]机器的配置上面给了,应该也不差了吧。 [/B]


机器不算太差,可能是你的order by 引起的吧。
你可以去掉order by 试试。

你可以把sort_area_size调到5m-10m左右。

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2006-11-12 20:16:58
12#
 楼主| 发表于 2005-2-4 10:42 | 只看该作者

Re: Re: sort_area_size的大小是1m,多大合适

最初由 xzh2000 发布
[B]

机器不算太差,可能是你的order by 引起的吧。
你可以去掉order by 试试。

你可以把sort_area_size调到5m-10m左右。 [/B]



去掉order by在没有单列索引(复合索引存在)的情况下走了全表扫描,执行时间仍然在26秒多,加上order by 就走复合索引了时间也是26秒多。
但有一个问题去掉order by 就不能满足我的功能要求了。
另外: sort_area_size是不是每个用户都会占这么大,如果给的大了,系统的内存会不会消耗太大。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
66
ITPUB元老
日期:2005-07-16 18:49:11授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44现任管理团队成员
日期:2011-05-07 01:45:08版主3段
日期:2012-05-15 15:24:11
13#
发表于 2005-2-4 11:03 | 只看该作者
走复合索应该是使用的index full scan吧?要么就是index skin scan,
无论如何都不如单列索引效果好。
不去也可以将sort_area_size加大一些就行啦,会,你的内存足够多哦。

使用道具 举报

回复
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
14#
发表于 2005-2-4 11:03 | 只看该作者
hehe
实在不行可以在session level改sort_area_size
alter session set sort...

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2006-11-12 20:16:58
15#
 楼主| 发表于 2005-2-4 11:27 | 只看该作者

难道真的没法优化了吗?

各位斑竹给点建议,谢谢!

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33生肖徽章2007版:鸡
日期:2008-01-02 17:35:53
16#
发表于 2005-2-4 11:28 | 只看该作者
你的oracle配置的是mts的吗?如果是,那么sort_area 是在sga中的,另外oracle检索的数据占总数据量的5%左右的时候就全表扫了,你的这个。。。呵呵。。。。正好在临界状态。。。。

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2006-11-12 20:16:58
17#
 楼主| 发表于 2005-2-4 16:48 | 只看该作者

还有优化的余地吗?给点建议,我该怎么办?

谢谢

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33ITPUB元老
日期:2006-11-12 20:16:58
18#
 楼主| 发表于 2005-2-4 22:41 | 只看该作者

再顶一下

谢谢

使用道具 举报

回复
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
19#
发表于 2005-2-5 01:13 | 只看该作者

提取表中的所有列,建单列和复合索引都没有用

因为oracle访问好3万次索引后会访问三万次磁盘,没有办法优化的,你真的需要这么多列吗,最多使用并行范围索引扫描,或组织成索引化表,我觉得这些都不太可能实现,呵呵!要访问磁盘的操作时没有办法优化的,要么从硬件下手

使用道具 举报

回复
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
20#
发表于 2005-2-5 11:03 | 只看该作者

Re: 提取表中的所有列,建单列和复合索引都没有用

最初由 ahlu 发布
[B]因为oracle访问好3万次索引后会访问三万次磁盘,没有办法优化的,你真的需要这么多列吗,最多使用并行范围索引扫描,或组织成索引化表,我觉得这些都不太可能实现,呵呵!要访问磁盘的操作时没有办法优化的,要么从硬件下手 [/B]


1.尝试重新组织表
-- 把表数据备份到临时表中
-- 重新组织表数据
truncate table ....;
create table ... as select * from temp_table order by prma,fln,fs,fltdate;

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表