Oracle SQL 性能问题 - 如何使查询停止运行并在找到第一个实例时返回
Posted
技术标签:
【中文标题】Oracle SQL 性能问题 - 如何使查询停止运行并在找到第一个实例时返回【英文标题】:Oracle SQL Performance issue - How to make a query stop running and return when finding the first instance 【发布时间】:2020-11-23 09:32:10 【问题描述】:我在 Oracle 中有一个表,其中包含大量员工和日期数据(以及更多......),我需要多次查询它,因为它是一个大程序的一部分。
我在此表中查找的唯一内容是特定日期的员工是否出现在表中,我不在乎有多少次或任何其他数据。
目前我的查询是:
从 EMPLOYEES 中选择不同的(EMP_ID) 其中 TRUNC(DATE = TO_DATE('2020-11-21', 'yyyy-mm-dd') )AND EMP_ID = '123456789'
问题是查询执行不佳 - 每个查询大约需要 1.5 分钟,这是不能容忍的,因为它会消耗服务器资源。
有没有办法让查询在发现员工确实出现在特定日期并返回某些内容时停止(不继续运行)??
非常感谢!!
【问题讨论】:
我不确定,但请尝试使用EXISTS
,如下所示:SELECT 1 AS EMP_EXISTS FROM DUAL WHERE EXISTS ( SELECT 1 FROM EMPLOYEES WHERE DATE >= TO_DATE('2020-11-21', 'yyyy-mm-dd') AND DATE < TO_DATE('2020-11-22', 'yyyy-mm-dd') AND EMP_ID = '123456789' )
,是的,DATE
和 EMP_ID
列上的索引在这里将非常有用。
你在写 - 添加索引确实有帮助!谢谢!!
【参考方案1】:
您可以对伪列 rownum 进行过滤,这样它就不会搜索与您的过滤器匹配的每一行:
where rownum=1
.
但是对于这个查询,看起来您可能想要一个 empid 上的索引,并且您想确保您在查询中使用了正确的数据类型(它真的是一个字符串吗?)。您的日期过滤器是否正确?
【讨论】:
你在写 - 添加索引确实有帮助!谢谢!!以上是关于Oracle SQL 性能问题 - 如何使查询停止运行并在找到第一个实例时返回的主要内容,如果未能解决你的问题,请参考以下文章