社区
Oracle 高级技术
帖子详情
ORACLE SQL语句优化问题
qinkm
2003-08-30 03:12:08
我有一个视图,关联了约20个表.这个视图在整个系统中非常重要,因此,使用频率也很高,现在有个问题:我的这个查询,即便结果只有一第记录,也要查很长时间,约30秒左右,现在我的数据库里最大的一张表(所关联的表)记录数也不到20000条,其他表数据都只有几十条...大家能不能给出一些优化SQL的方法?
我已经将SQL语句的WHERE语句,最小的条件放最后了...
...全文
38
19
打赏
收藏
ORACLE SQL语句优化问题
我有一个视图,关联了约20个表.这个视图在整个系统中非常重要,因此,使用频率也很高,现在有个问题:我的这个查询,即便结果只有一第记录,也要查很长时间,约30秒左右,现在我的数据库里最大的一张表(所关联的表)记录数也不到20000条,其他表数据都只有几十条...大家能不能给出一些优化SQL的方法? 我已经将SQL语句的WHERE语句,最小的条件放最后了...
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
redarmy_
2003-11-09
打赏
举报
回复
最根本的问题是数据库的设计不大合理,一个视图要关联20个表?可以在其他表增加冗余;既然这个视图如此常用,也可以改成表,其他表数据变化时更新一下。
hushuangyang
2003-11-08
打赏
举报
回复
数据适量的冗余是有必要的!
“那你代码表怎么用呀,如操作员,在业务表中存的是操作员号,但是在界面上要显示操作员名,这时不就要与操作员表进行关联吧.这时你怎么写?”
在业务表中可以将操作员号和操作员名同时存放。查询的时候就不要关联了。
shuipipi
2003-11-07
打赏
举报
回复
泥的SQL也真能养眼的!:)
能够写出这么多表相关联的SQL语句来,是不是应当回头想想,表结构是不是应当有所改进或者重新设计了?这样的SQL语句,光靠优化SQL好像没什么效果~
aceplus
2003-11-07
打赏
举报
回复
mark 一下,以后学习~~~~~~~~~~
da_peng
2003-11-07
打赏
举报
回复
我原来用10个表建的视图也很慢,将optimizer_search_limit的值增加一倍效率要高多了
Fenng
2003-11-07
打赏
举报
回复
表结构设计的有问题,估计是学院派的人设计的,
不要在数据库中过多的关联表,会累死人的
lilylamb
2003-09-14
打赏
举报
回复
我正在试验
armu80830
2003-09-14
打赏
举报
回复
建议楼主安装一个SQL Expert for Oracle 工具软件,我一般遇到很耗时的sql语句,都由它给我自动优化生成新的sql语句,很了不起的软件。
jpabcd
2003-09-12
打赏
举报
回复
把where条件颠倒一下顺序试试,不知道是用CBO还是RBO,最好用plan看一下!
skyxj
2003-09-06
打赏
举报
回复
设定optimizer_search_limit值看看
刚刚在网上看到的还没有测试
qinkm
2003-08-30
打赏
举报
回复
beckhambobo(beckham) :到哪里去找"oracle erp"呀,我用的是ORACLE8.17.
qinkm
2003-08-30
打赏
举报
回复
那你代码表怎么用呀,如操作员,在业务表中存的是操作员号,但是在界面上要显示操作员名,这时不就要与操作员表进行关联吧.这时你怎么写?
BlueskyWide
2003-08-30
打赏
举报
回复
不理解楼主怎么这么喜欢用"+"?
要知道模糊比较是很费时空的。
感觉是数据库设计时的缺陷。
beckhambobo
2003-08-30
打赏
举报
回复
说一个题外话,oracle erp有万个表,视图也多到数不完,参考他们语句,受益良多
qinkm
2003-08-30
打赏
举报
回复
具体视图SQL语句如下:
SELECT TO_CHAR(A.SELNO) SELNO, A.SECVNO,To_Char(A.SecConFlag) SecConFlag,
C.RName RName, A.RCode RCODE,
QUTVNO, A.COTCODE,D.CotName,
B.TRName TRCODE, A.SEOVNO, To_Char(A.SECCODATE,'YYYY-MM-DD') SECCODATE,
To_Char(A.SECMPDATE,'YYYY-MM-DD') SECMPDATE,
To_Char(A.SECTRDATE,'YYYY-MM-DD') SECTRDATE,To_Char(A.SECFIDATE,'YYYY-MM-DD') SECFIDATE,
To_Char(A.SECPADATE,'YYYY-MM-DD') SECPADATE,To_Char(A.SECENDATE,'YYYY-MM-DD') SECENDATE,
To_Char(A.SECPIDATE,'YYYY-MM-DD') SECPIDATE,To_Char(A.SECCFDATE,'YYYY-MM-DD') SECCFDATE,
A.SECWCODE SECWCODE, A.SECBCODE SECBCODE,
A.SECZSTATUS,A.SECSTATUS,
H.PersonName SECWName,I.DeptName SECBName,
A.SECCCODE,A.SECNAME, E.AREANAME SECERA, A.SECTELP, A.SECFAX,
F.SSNAME SECSETMENT,A.SECACCBANK, A.SECACBANK, A.SECCOTERM,
A.SECRMAK,A.RATEPAYNO,A.CUSTOMER,A.CONTRACTOR,
AME,A.RECTADDR,A.RECTPOSTCODE,A.RECTTEL,A.ARVSTATION,A.SELLERNO,
J.SECSCODE,J.QURCODE QURCODE,O.QURName QURName,
J.TESCODE TESCODE,
J.PAWCODE PAWCODE,K.PAWName PAWName,
J.PRTCODE PRTCODE,L.PrteName PrtName,
J.PRCCODE PRCCODE, J.SECSNAME, J.SECSMODEL,
J.SECSSPEC, J.SECSMETAL SECSMETAL,Q.AlloySortName AlloySortName,
J.SECSSTATUS SECSSTATUS,P.AlloyStateName AlloyStateName,J.SECSQTY,
J.SECSWEGT, J.SECUNSET, J.SECSTAXP, J.SECSPRICE,
J.SECSTAXR, J.SECSMONY, J.SECSALUIPRC, J.SECSSTATION,
J.SECSFATRY SECSFATRY,R.DeptName SECSFATRYNAME,
To_Char(J.SECSDEDATE,'YYYY-MM-DD') SECSDEDATE, J.SECSJQTY,
TORENUM,'0') STORENUM
FROM SEL_SELLCONTRACTMAIN A,SEL_SELLCONTRACTSUB J,
PUB_AlloySort Q,PUB_AlloyState P,
Pub_Deptment R,
PUB_Person H,Pub_Deptment I,PUB_TRANSFERWAY B,
PUB_AREASET E,
SYS_RATIFY C ,PUB_CONTRACTTYPE D,
PUB_SETTLEMENT F,
PUB_PAGEWAY K,PUB_PRICETYPE L,
PUB_QUARTER O
Where (A.SECVNO=J.SECVNO) and A.RCode = C.RCode(+) and A.TRCODE = B.TRCODE(+) and
A.COTCODE = D.COTCODE(+) and A.SECERA = E.AREACODE(+) and
A.SECSETMENT = F.SSCODE(+) and --A.SECACCBANK = G.CODEID(+) and
A.SECWCODE=H.PersonCode(+) and
A.SECBCODE=I.DeptCode(+)
and (J.PAWCODE = K.PAWCODE (+))
and (J.PRTCODE = L.PRTCODE (+))
and (J.QURCODE = O.QURCODE(+))
and (J.SECSMETAL = Q.AlloySortCode(+)) and (J.SECSSTATUS = P.AlloyStateCode(+))
and (J.SECSFATRY = R.DeptCode(+))
表记录大小从FROM语句后依次递减.
qinkm
2003-08-30
打赏
举报
回复
龙飞虎的专栏在哪里?
hrb_qiuyb
2003-08-30
打赏
举报
回复
把你的视图的sql语句拿出来,分析一下语句执行计划,对没走索引的部分观注一下。
另看一下龙飞虎的专栏吧,他正在那讲sql优化呢。
armu80830
2003-08-30
打赏
举报
回复
一言难尽,多查查资料吧
最好将你的详细情况贴出来,请高手们来帮忙
jiezhi
2003-08-30
打赏
举报
回复
只能給你提供一些資料了:
http://www.zdnet.com.cn/developer/code/story/0,2000081534,39128560-1,00.htm
http://tech.sina.com.cn/c/2002-02-25/11339.html
http://www.ccidnet.com/html/tech/guide/2001/12/06/92_3867.html
oracle
经典笔记
SQL语句
.pdf SQL语法练习.pdf PLSQL基础教程-必看.pdf
Oracle
_PL-SQL入门教程(经典).doc
【转存】
Oracle
SQL语句
之常见
优化
方法总结
下面列举一些工作中常常会碰到的
Oracle
的
SQL语句
优化
方法: 1、
SQL语句
尽量用大写的; 因为
oracle
总是先解析
SQL语句
,把小写的字母转换成大写的再执行。 2、使用表的别名: 当在
SQL语句
中连接多个表时, 尽量使用表的别名并把别名前缀于每个列上。这样一来, 就可以减少解析的时间并减少那些由列歧义引起的语法错误。 3、选择最有效率的表名顺序(只在基于规则的
优化
器(RBO)中有效):
ORACLE
的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的.....
Oracle
的 SQL 语句
优化
方法:
Oracle
的 SQL 语句
优化
方法:
Oracle
SQL语句
之常见
优化
方法总结
下面列举一些工作中常常会碰到的
Oracle
的
SQL语句
优化
方法: 1、
SQL语句
尽量用大写的; 因为
oracle
总是先解析
SQL语句
,把小写的字母转换成大写的再执行。 2、使用表的别名: 当在
SQL语句
中连接多个表时, 尽量使用表的别名并把别名前缀于每个列上。这样一来, 就可以减少解析的时间并减少那些由列歧义引起的语法错误。 3、选择最有效率的表名顺序(只在基于规则的
优化
器(RB
Oracle
SQL语句
性能
优化
方法大全
下面列举一些工作中常常会碰到的
Oracle
的
SQL语句
优化
方法: 1、
SQL语句
尽量用大写的; 因为
oracle
总是先解析
SQL语句
,把小写的字母转换成大写的再执行。 2、选择最有效率的表名顺序(只在基于规则的
优化
器中有效):
ORACLE
的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(in.
Oracle 高级技术
3,491
社区成员
18,714
社区内容
发帖
与我相关
我的任务
Oracle 高级技术
Oracle 高级技术相关讨论专区
复制链接
扫一扫
分享
社区描述
Oracle 高级技术相关讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章