刚刚把数据库从817迁移到了10g,发现以前经常使用的语句变慢很多
select * from dxx order by xh desc;
我需要用这个来查询最近的数据,pl/sql developer中用这个语句很方便
一下就可以把最近的若干条数据取出来了
我已经在dxx表的xh字段上建立了索引
817中可以正常使用索引,换成10g之后不再使用索引,需要全表扫描
以前瞬间出来的结果现在需要几十秒。。
有什么办法可以解决这个问题啊
select * from dxx order by xh desc;
我需要用这个来查询最近的数据,pl/sql developer中用这个语句很方便
一下就可以把最近的若干条数据取出来了
我已经在dxx表的xh字段上建立了索引
817中可以正常使用索引,换成10g之后不再使用索引,需要全表扫描
以前瞬间出来的结果现在需要几十秒。。
有什么办法可以解决这个问题啊
解决方案 »
- 初学PLSQL,搞的一个执行,有错误麻烦大侠可以帮修正下
- 学生学员成绩表的查询
- Eclipse6.5中tomcat启动问题
- 请问如何在pl/sql developer中查看一个包的存储过程的定义
- 物化视图是不是不支持子查询?
- 表或视图不存在,急,在线等!!!
- 关于TRIGGER的简单问题。。谢谢。。急。。
- 监听器错误:没有监听器!
- 高分求助:B/S结构系统中往Oracle数据库的Clob字段中添加信息时经常出现乱字符问题
- 这个sql语句怎么写?
- 深圳地区急求 Oracle数据库管理员技术指南(作者:Sumit Sarin) 书一本,要第2版的!
- 我们通常都配置oracle client目录里面的tnsnames.ora,但是在oracle的network\admin里面也有同名文件,这是做什么用呢?
并不是这一张表出了问题,其它表也有类似问题
dxx表结构如下
Name Type Nullable
------ -------------- --------
XH NUMBER(10)
FSZ VARCHAR2(20) Y
FSHM VARCHAR2(20) Y
JSZ VARCHAR2(20) Y
JSHM VARCHAR2(20)
DXNR VARCHAR2(4000)
TJSJ DATE Y
FSSJ DATE Y
SJFSSJ DATE Y
WBSY VARCHAR2(15) Y
FZH NUMBER Y
BZ CHAR(5) Y
YXJ NUMBER(3) Y
XT VARCHAR2(20)
xh字段上有索引
alter table DXX
add constraint PK_DXX primary key (XH)
select count(*) from dxx 得到结果427万
select * from dxx order by xh desc;取前22条数据需要30秒,没用到索引,需要全表扫描的
select * from dxx where rownum<23 order by xh desc;取前22条数据0.016秒,用到了这个索引
select * from dxx取前22条数据也只需要0.016秒
另外,select * from dxx where rownum<23 order by xh desc这样的脚本是取xh最大的22条数据还是随便取了22条数据之后按xh排序?看了一本书上说是后一种,不过我测试好象是前一种,现在心里很没把握,不知道oracle官方有没有什么说法?另外hongqi162(失踪的月亮)写的东西我看不懂,惭愧惭愧
“select * from dxx where rownum<23 order by xh desc;”取前22条数据0.016秒,用到了这个索引
并不是时间短就一定代表用上了索引,这句话总共只需要处理22条记录,当然快。2 “select * from dxx order by xh desc;取前22条数据需要30秒,没用到索引,需要全表扫描的
”
这个不一定的,就算用上索引,也需要处理索引的很多记录3 建议仔细查看执行计划
用没用到索引是我用plain看的,结果也证实了这一点
就拿select * from dxx order by xh desc这一句来说吧
相同的数据,相同的索引,在8i中很快就可以得到结果(<<1秒)
在10G中需要几十秒,这个对比是非常明显的
10G运行的机器比8i运行的机器还要好很多
8i运行在5年前买的m80机器上,4cpu12G内存
10G运行在刚刚买的p560上,8cpu16G内存
存储10G这边的也比8i的好很多,快N倍我想问的就是在10g的环境下
select * from dxx order by xh desc
如何可以很快得出结果?就象以前8i一样?
总不至于新机器新系统下10G表现不如8i吧
在10G下默认是CBO的.
select /*+rule */ * from dxx order by xh desc;
就可以了。
还有一个致命的xh上的索引没用,主键才可以!!!!!
归根结底还是oracle没有limit N这样的功能
order by的时候又不使用索引,最多只能用下主键,真要命。