情况如下:
表名称为BILL,里面有50万条记录,现在要查询这张表。在PL/SQL Developer中查询。测试语句如下:
1、select * from bill。查询效率很快,只需0.02秒。
2、select * from bill order by time desc 。耗时5秒。
但现在的需求就是必须根据情况2来排序的,查询的速度太慢了。
是不是有什么解决方案啊
表名称为BILL,里面有50万条记录,现在要查询这张表。在PL/SQL Developer中查询。测试语句如下:
1、select * from bill。查询效率很快,只需0.02秒。
2、select * from bill order by time desc 。耗时5秒。
但现在的需求就是必须根据情况2来排序的,查询的速度太慢了。
是不是有什么解决方案啊
解决方案 »
- asp+oracle 字符过长如何解决?ORA-01704: 字符串文字太长
- 关于调试oracle存储过程的工具 sys_cursor_viewer.exe
- between查询CPU消耗过高如何解决
- 屏蔽Oracle敏感返回信息
- 一条sql语句!!!!!!!!!!!!
- 不知为什么不能把文本输出到文件里
- oracle9i升级补丁到9.2.0.8,在运行catpatch.sql 时报错:SP2-0310:unable to open file "/oracle/product/9.2/rdbms/admin/owapatch.sql"。是不是会影响数据库?
- 出现这种表名是什么原因呢!~
- 请问大家在oracle中怎样用一个字段唯一标识一条记录?
- 简单存储过程的问题(解决后马上散分)
- 关于oracle 参数化查询的实现!!!大侠指点一下!
- ORA-17073这个错误是什么意思
create index ID_bill_SUBMIT on bill( time desc)
基本上没有任何效率提升,真是郁闷。。
同时检查temp表空间是否不足,如果不足的话,排序可能不是在内存中进行的
如何查看“执行计划是否使用了索引”?
select * from bill
select * from bill order by fid asc
效率差不多但是
select * from bill where fdestaddr='13711112222'
select * from bill where fdestaddr='13711112222' order by fid asc
查询结果是没有数据的,第二条却要执行3秒,郁闷中。
select * from bill where fdestaddr='13711112222' order by fid asc 肯定会慢的;
索引要跟你的排序规则相同;
如果相同了还是慢,偶无言……
* from bill order by time desc 上面的语句可以确保SQL在执行时用到INDEX。但是用到INDEX并不一定代表性能会提升。因为看不到你使用的其它条件,而且使用*作为检索内容总会引起较大的全表扫描。这样你使用INDEX反而会碍事。如果确定需要抽取表中的所有50万数据(不知道你们怎么设计的),那么不可避免的要产生较高的磁盘访问次数。此时查询的速度INDEX也是无济于事的。考虑升级你的硬盘,内存。优化该表存放的数据块吧!
所以就是有一些优化,那么也不是有太多可以改进的办法.唯一的就是一次不要读取那么多,然后再排序.
检查是否是table assess full(全表扫描)
如果是全表扫描:
确定表是否长时间没有进行分析,如果可能重新分析一下表;
检查表的排序没有使用索引的原因,可能和一些设置或者语句有关;
select * from bill where fdestaddr='13711112222' order by fid asc
对这两句表示质疑~ Oracle是先查询,再排序的, 所以这两句执行速度肯定相同
表名称为BILL,里面有50万条记录,现在要查询这张表。在PL/SQL Developer中查询。测试语句如下:
1、select * from bill。查询效率很快,只需0.02秒。
2、select * from bill order by time desc 。耗时5秒。
但现在的需求就是必须根据情况2来排序的,查询的速度太慢了。
是不是有什么解决方案啊==============================实际上都是全表扫描的,后面主要是在排序。前面的不用排序是
主要是物理存储上的问题
物理存储是ROWID的
如果你的经常ORDER BY TIME 建议物理存储按TIME降序来存储