数据库性能问题

[复制链接]
查看11 | 回复8 | 2006-2-5 17:25:21 | 显示全部楼层 |阅读模式
做查询的时候,加上(+)外连接后会很慢,但是不加有些数据还查不出来,现在的问题是如何能让速度快一些那?而该查的数据都能查询出来(表中的数据很大,并且是多表关联)谁有什么好办法吗?
回复

使用道具 举报

千问 | 2006-2-5 17:25:21 | 显示全部楼层
数据库的作用和应用的关键是数据的安全存储和高效的数据查询功能,要保证查询性能的高效,数据的存储须按数据库的存储规则来设计和存放数据库对象,只有这样,数据库的运转才能高效、安全。
要解决性能问题要从以下方面入手:
0.数据库运行的载体---硬件性能
1.数据库的物理存储
2.数据库的逻辑设计、存储
4.对数据库所有对象的认识和使用
只有掌握了这些,才能对数据库应用自如。认识是一个漫长的过程,需要不懈的努力,努力吧,只要努力,你终会成功!
一点对学习数据库的感悟,与同仁们共勉,见笑了!
回复

使用道具 举报

千问 | 2006-2-5 17:25:21 | 显示全部楼层
把sql语句和执行计划贴出来看看
回复

使用道具 举报

千问 | 2006-2-5 17:25:21 | 显示全部楼层
SELECT I.INSTRUMENT_ID, GOODSRACK.STOCKROOM_OID, GOODSRACK.DESCRIPTION GOODS_RACK, G.DESCRIPTION GOODS_LOCATION, NULL BOX_OID,

I.STATUS, STATUSCHANGEENTRY.INSTRUMENTSTATUS, I.INSTRUMENT_TYPE_OID, SLOG.END_DATE, I.TYPE_CODE, I.METER_CODE, STOCKROOM.ADMINISTRATOR
FROM STOCKROOM, GOODSRACK,GOODSLOCATION G, STOCKLOG SLOG, STATUSCHANGEENTRY, REQUEST R,INSTRUMENT I
WHERE
STOCKROOM.STOCK_ROOM_OID = GOODSRACK.STOCKROOM_OID(+)
AND GOODSRACK.GOODS_RACK_OID = G.GOODSRACK_OID(+)
AND G.GOODS_LOCATION_OID = SLOG.GOODS_LOCATION_OID (+)
AND SLOG.STOCK_LOG_OID = (SELECT MAX(STOCKLOG.STOCK_LOG_OID) FROM STOCKLOG WHERE STOCKLOG.INSTRUMENT_OID = I.INSTRUMENT_OID)
AND STATUSCHANGEENTRY.STATUS = 0
AND STATUSCHANGEENTRY.INSTRUMENT_OID = I.INSTRUMENT_OID
AND R.REQUEST_OID = I.REQUEST_OID
AND i.division_oid = :1
这是sql,
回复

使用道具 举报

千问 | 2006-2-5 17:25:21 | 显示全部楼层
Operation
Object Name
Rows
Bytes
Cost
Object Node
In/Out
PStart
PStop
SELECT STATEMENT Optimizer Mode=CHOOSE
1
18

FILTER

HASH JOIN OUTER
1
147
16

HASH JOIN OUTER
1
132
13

HASH JOIN OUTER
1
115
8


MERGE JOIN CARTESIAN
1
100
5


TABLE ACCESS BY INDEX ROWID
JLUSER.STATUSCHANGEENTRY
1
12
1


NESTED LOOPS
1
91
3


NESTED LOOPS
1
79
2


TABLE ACCESS BY INDEX ROWID
JLUSER.INSTRUMENT
1
66
1.1


BITMAP CONVERSION TO ROWIDS


BITMAP INDEX SINGLE VALUE
JLUSER.IDX_DIVISION_OID


INDEX UNIQUE SCAN
JLUSER.REQUEST_PRIMARY_KEY
271 K
3 M


INDEX RANGE SCAN
JLUSER.IDX_INSTRUMENTOID_STATCHENTRY
2
1


BUFFER SORT
2
18
4


TABLE ACCESS FULL
JLUSER.STOCKROOM
2
18
2


TABLE ACCESS FULL
JLUSER.GOODSRACK
34
510
2

TABLE ACCESS FULL
JLUSER.GOODSLOCATION
3 K
63 K
4

TABLE ACCESS FULL
JLUSER.STOCKLOG
160
2 K
2

SORT AGGREGATE
1
10

TABLE ACCESS FULL
JLUSER.STOCKLOG
1
10
2

计划
回复

使用道具 举报

千问 | 2006-2-5 17:25:21 | 显示全部楼层
1.试一下物化视图,这条语句如果要用fast 刷新需要GOODSRACK.STOCKROOM_OID,G.GOODSRACK_OID,SLOG.GOODS_LOCATION_OID 有唯一约束;
2.或者如果i.division_oid:=1能过滤掉大部分数据的话使用通过函数返回cursor的方式
参见http://*****.zahui.net/html/1/26826.htm
回复

使用道具 举报

千问 | 2006-2-5 17:25:21 | 显示全部楼层
*****.zahui.net/html/1/26826.htm
回复

使用道具 举报

千问 | 2006-2-5 17:25:21 | 显示全部楼层
抱歉不知道为什么*****变成*****了
在论坛上为什么不能连续输入c n o u g
参考http://www.chinaitpower.com/A200507/2005-07-27/171528.html也可以
回复

使用道具 举报

千问 | 2006-2-5 17:25:21 | 显示全部楼层
看看提问的智慧
对于sql 性能问题,应该……
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行