oracle查询排序速度慢,Oracle-请问Oracle SQL排序查询慢如何解决

这个原因很简单:

SELECT * FROM(SELECT T.*,ROWNUM RN FROM(

SELECT * FROM INFO ORDER BY PDATE DESC

) T WHERE ROWNUM<2001) WHERE RN>0

算一下,如果使用定义在PDATE上的索引,那么拿到这2000个rowid后,还需要做2000次random io去读取这2000条记录。 -- 实在不如直接读出所有记录来做排序,成本还小的多。

改为:

SELECT B.id, B.created, T.RN FROM

big_table B

join

(SELECT created,ROWNUM RN FROM (SELECT created FROM big_table ORDER BY created DESC) WHERE ROWNUM<2000) T

on B.created=T.created

WHERE RN>0;

则会使用定义在PDATE上的索引来取最大的2000个PDATE,无需 排序。

下面的实验是 用了我自己建的表,10w条数据。没看出效果。。。,不过第一个select需要排序,第二个不需要。

SQL> SELECT * FROM

2 (SELECT T.*,ROWNUM RN FROM (SELECT id,created FROM big_table ORDER BY created DESC) T WHERE ROWNUM<2000)

3 WHERE RN>0 and rownum>1;

Plan hash value: 2610743403

| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | 1999 | 69965 | | 881 (2)| 00:00:11 |

| 1 | COUNT | | | | | | |

|* 2 | FILTER | | | | | | |

|* 3 | VIEW | | 1999 | 69965 | | 881 (2)| 00:00:11 |

|* 4 | COUNT STOPKEY | | | | | | |

| 5 | VIEW | | 98883 | 2124K| | 881 (2)| 00:00:11 |

|* 6 | SORT ORDER BY STOPKEY| | 98883 | 1255K| 2336K| 881 (2)| 00:00:11 |

| 7 | TABLE ACCESS FULL | BIG_TABLE | 98883 | 1255K| | 406 (1)| 00:00:05 |

Predicate Information (identified by operation id):

2 - filter(ROWNUM>1)

3 - filter("RN">0)

4 - filter(ROWNUM<2000)

6 - filter(ROWNUM<2000)

1 recursive calls

0 db block gets

1488 consistent gets

0 physical reads

0 redo size

471 bytes sent via SQL*Net to client

512 bytes received via SQL*Net from client

1 SQL*Net roundtrips to/from client

1 sorts (memory)

0 sorts (disk)

0 rows processed

SQL> SELECT B.*, T.RN FROM

2 big_table B

3 join

4 (SELECT created,ROWNUM RN FROM (SELECT created FROM big_table ORDER BY created DESC) WHERE ROWNUM<2000) T

5 on B.created=T.created

6 WHERE RN>0 and rownum>1;

Plan hash value: 1806601054

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | 364K| 42M| 678 (2)| 00:00:09 |

| 1 | COUNT | | | | | |

|* 2 | FILTER | | | | | |

|* 3 | HASH JOIN | | 364K| 42M| 678 (2)| 00:00:09 |

|* 4 | VIEW | | 1999 | 41979 | 268 (1)| 00:00:04 |

|* 5 | COUNT STOPKEY | | | | | |

| 6 | VIEW | | 98883 | 772K| 268 (1)| 00:00:04 |

| 7 | INDEX FULL SCAN DESCENDING| INX | 98883 | 772K| 268 (1)| 00:00:04 |

| 8 | TABLE ACCESS FULL | BIG_TABLE | 98883 | 9849K| 407 (1)| 00:00:05 |

Predicate Information (identified by operation id):

2 - filter(ROWNUM>1)

3 - access("B"."CREATED"="T"."CREATED")

4 - filter("T"."RN">0)

5 - filter(ROWNUM<2000)

0 recursive calls

0 db block gets

1495 consistent gets

0 physical reads

0 redo size

1479 bytes sent via SQL*Net to client

512 bytes received via SQL*Net from client

1 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

0 rows processed

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jax-ws cxf_Apache CXF – JAX-WS –简单教程

jax-ws cxf许多Java开发人员都认为Web Service实现的任务艰巨-好吧&#xff0c;没有人能真正责怪他们&#xff0c;尤其是在企业应用程序开发的多年中&#xff0c;这给开发和设计带来了很多复杂性。 对于某些人来说&#xff0c;了解它是构建完整的企业应用程序的下一步-Web服务-…

oracle instance client 下载,安装Oracle Instance Client

不想再装客户端了&#xff0c;个太大了。1、去下载你想要的Instance Clent版本&#xff0c;解压&#xff1b;2、把以前备份的sqlnet.oratnsnames.ora放在解压后的目录&#xff1b;3、配置环境变量变量名:TNS_ADMIN变量值:X:\XXXXXXXX\instantclient_10_24、用记事本保存为XX.re…

写屏障是什么_面试官为什么问内存模型总离不开final关键字,该如何应对?

Java 语言的每个关键字都设计的很巧妙&#xff0c;金雕玉琢&#xff0c;只有深度钻研其中&#xff0c;才知其中懊悔&#xff0c;本文带领大家一起深入理解 Java 内存模型之 final。加我微信好友的不要着急&#xff0c;手机没电了&#xff0c;等我借个充电器之后&#xff0c;再一…

非静态方法可以访问Java中的静态变量/方法吗?

“非静态方法可以访问静态变量或调用静态方法”是Java中有关静态修饰符的常见问题之一&#xff0c;答案是&#xff0c; 是的 &#xff0c;非静态方法可以访问静态变量或调用静态方法。 Java中的方法。 这没有问题&#xff0c;因为有静态成员&#xff0c;即静态变量和静态方法都…

php中$_post怎么用,php – 如何在$_POST []中使用变量

我需要遍历一堆动态生成的字段,但这不起作用&#xff1a;$population_density $_POST[$current_location_id];我有一个页面列表,其人口在一页上;我需要这样做,这样你就可以立刻更新它们.所以我使字段名称动态地对应于location_id.提交帖子时,我需要像这样迭代它们,但似乎你不能…

python输入字母终止_将用户输入限制为字母

我是学python的技术作家。我想写一个验证姓名字段输入的程序&#xff0c;作为实践&#xff0c;将用户输入限制为字母。我在这里看到了一个类似的验证数字(年龄)字段的代码&#xff0c;并将其用于字母表&#xff0c;如下所示&#xff1a;import stringimport rer re.compile(r[…

which oracle linux,(总结)Linux下Oracle11gR2的ORA-00845错误解决方法

PS&#xff1a;前些时间一台演示环境的Oracle 11g for Linux不知什么原因&#xff0c;启动不起来&#xff0c;报错ORA-00845。搜索了下&#xff0c;这个问题是由于设置SGA的大小超过了操作系统/dev/shm的大小。当时解决了没空写总结&#xff0c;今天有点空&#xff0c;总结分享…

oracle编程基本语法,oracle编程基础语法

oracle数据开发编程结构&#xff1a; declare[定义变量]begin[逻辑代码]exception[捕获异常]end&#xff1b;实例&#xff1a;declarea number:1;b number:2;c number;beginc:(a*b)/(ab);dbms_output.put_line(c);exceptionwhen zero_divide thendbms_output.put_line(除数不能…

java8optional_关于Java 8的Optional的介绍

java8optional我最近发现了JDK 8中Optional类型的添加。 Optional类型是避免NullPointerException一种方法&#xff0c;因为从方法中获取Optional返回值的API使用者被“强制”执行“在线”检查&#xff0c;以消耗其实际返回值。 更多细节可以在Javadoc中看到。 可以在此博客文章…

python大文件排序_python实现按创建时间对文件排序

测试中&#xff0c;测试log是经常需要保存一段时间以便于后续查询&#xff0c;但是如果一段时间不删除&#xff0c;会导致硬盘空间变小而影响自动化测试&#xff0c;通常空间太小&#xff0c;自动化测试case就不能调用了&#xff0c;或者即使调用&#xff0c;可能会引起新测试的…

oracle存储过程深入,深入了解oracle存储过程的优缺点

定义&#xff1a;存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集&#xff0c;经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象&#xff0c;任何一个设计良好的数据库应用程…

如何在Java 8中使用LocalDateTime格式化/解析日期-示例教程

Java项目中的常见任务之一是将日期格式化或解析为String&#xff0c;反之亦然。 解析日期表示您有一个表示日期的字符串&#xff0c;例如“ 2017-08-3”&#xff0c;并且要将其转换为表示Java中日期的对象&#xff0c;例如Java 8之前版本中的java.util.Date以及LocalDate或Loca…

如何获取当前刀具号_数控刀具的选用原则,如何使用数控刀具?一文全面介绍数控刀具...

数控刀具选用概述学习数控相关知识&#xff0c;最基础的是认识和了解刀具的材料以及选用原则&#xff0c;我们应当了解数控刀具的种类及特点、如何正确选择和使用数控加工刀具&#xff1b;学会根据被加工材料来合理选择数控刀具的材料和切削参数。选用原则&#xff1a;数控车床…

Java命令行界面(第27部分):cli-parser

CLI Parser最初托管在Google Code上&#xff0c;现在已存档在Google Code上 &#xff0c;现在可以在GitHub上使用 。 归档的Google Code项目页面将CLI解析器描述为“使用非常简单&#xff0c;非常小的依赖项”&#xff0c;它使用注释“使非常简洁的主要方法不需要知道如何解析带…

linux系统中如何安装qwt,linux下Qt开发环境中qwt库的安装与使用

qwt的安装与使用安装好qt开发环境后&#xff0c;先去下载qwt库源代码。以我下载的qwt-6.0.1.zip为例&#xff0c;解压得到qwt-6.0.1。1.安装qwt-6.0.1执行下面的命令&#xff1a;1 cd qwt-6.0.12 qmake3 make4 make install这样就完成qwt-6.0.1的安装了&#xff0c;安装的路径是…

moxy json介绍_MOXy的对象图和动态JAXB

moxy json介绍JAXB&#xff08;JSR-222&#xff09;使您可以轻松地将域类的实例转换为XML。 EclipseLink MOXy实现提供了一个称为Dynamic JAXB的扩展&#xff0c;在其中&#xff0c;您可以使用诸如DynamicEntity之类的映射实例代替真实的类​​。 您可以使用采用属性名称的get和…

linux 查看服务器作业,linux – 如何在服务器负载较低时运行作业?

我有一个运行磁盘快照的命令(在EC2上,冻结XFS磁盘并运行EBS快照命令),该命令设置为作为cron作业定期运行.理想情况下,如果在任务计划运行时磁盘被大量使用,我希望能够将命令延迟一段时间.我担心使用nice / ionice可能没有正确的效果,因为我希望脚本在运行时以高优先级运行(即等…

wordcloud python3.6能用吗_Python3.6环境下安装wordcloud模块遇到的问题及解决办法

“error: Microsoft Visual C 14.0 is required…”问题解决今天在Python 3.6环境中&#xff0c;制作词云&#xff0c;需要安装wordcloud模块&#xff0c;在安装的过程中遇到了“error: Microsoft Visual C 14.0 is required…” 的问题&#xff0c;很是烦恼&#xff0c;最后找…

使用基本身份验证来保护Spring Boot REST API

这是我的Spring Boot Blog帖子系列的第三篇文章。 在第一篇文章中&#xff0c;我谈到了我使用Spring Boot创建RESTFul Services的经验。 然后我将样本扩展到 与Swagger文档集成 。 在这篇文章中&#xff0c;我将在安全方面扩展上述示例。 什么是API安全性 API安全性广泛&…

使用2.26内核的linux,介绍linux 2.6.9-42内核升级到linux 2.6.26-42的方法

介绍linux 2.6.9-42内核升级到linux 2.6.26-42的方法来源&#xff1a;互联网作者&#xff1a;佚名时间&#xff1a;2013-04-10 13:32这篇升级Linux内容的文章&#xff0c;是基于Red Hat的Linux版本&#xff0c;从linux 2.6.9-42内核升级到linux 2.6.26-42的方法&#xff0c;对于…