Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取具有DISTINCT和rownum的记录_Sql_Performance - Fatal编程技术网

Sql 获取具有DISTINCT和rownum的记录

Sql 获取具有DISTINCT和rownum的记录,sql,performance,Sql,Performance,我在执行以下查询时遇到性能问题。获取结果花费的时间太长。它一次获取整个结果(比如3000个)。我试图使用rownum获取10条记录。如果您使用的是rownum,那么我假定您使用的是Oracle Oracle在应用rownum之后而不是之前执行distinct。唉。我认为这是相同逻辑的一部分,之后也应用了orderby 您可以通过使用子查询来修复它: select s.* from (<your query here>) s where rownum < 11; --以及sys

我在执行以下查询时遇到性能问题。获取结果花费的时间太长。它一次获取整个结果(比如3000个)。我试图使用
rownum获取10条记录。如果您使用的是
rownum
,那么我假定您使用的是Oracle

Oracle在应用
rownum
之后而不是之前执行
distinct
。唉。我认为这是相同逻辑的一部分,之后也应用了
orderby

您可以通过使用子查询来修复它:

select s.*
from (<your query here>) s
where rownum < 11;
--以及sysdate-180和sysdate之间的ol.actual_Shipping_日期 其中oh.sell_to_org_id=12338


实际上,在我看来,整个查询应该使用
groupby
编写,而不是使用带有分析函数的
distinct
。这也可能有助于提高性能。

如果您使用的是
rownum
,那么我认为您使用的是Oracle

Oracle在应用
rownum
之后而不是之前执行
distinct
。唉。我认为这是相同逻辑的一部分,之后也应用了
orderby

您可以通过使用子查询来修复它:

select s.*
from (<your query here>) s
where rownum < 11;
--以及sysdate-180和sysdate之间的ol.actual_Shipping_日期 其中oh.sell_to_org_id=12338


实际上,在我看来,整个查询应该使用
groupby
编写,而不是使用带有分析函数的
distinct
。这也可能有助于提高性能。

是的,rownum是resultrow的实习生编号,作为where子句的一部分进行过滤。所以它发生在distinct.yes之前,rownum是resultrow的内部编号,它作为where子句的一部分进行过滤。所以它发生在不同的时间之前。
SELECT DISTINCT oh.header_id,
      oh.cust_po_number purchase_order, oh.order_number,
      DECODE(oh.orig_sys_document_ref, NULL, oh.orig_sys_document_ref,
      SUBSTR(oh.orig_sys_document_ref, LENGTH('OE_ORDER_HEADERS_ALL')+1)) web_reference_number,
      TO_CHAR(oh.ordered_date, 'FMMon-DD-YYYY') date_ordered,
      min(schedule_ship_date) over (partition by oh.header_id) as oldest_schedule_ship_date,
      oe_totals_grp.get_order_total(ol.header_id,NULL,'ALL') total_value,
      oh.transactional_curr_code currency_code,
      COUNT(*) over() AS total_count
FROM oe_order_headers_all oh join
     oe_order_lines_all ol
     on Oh.Header_Id = Ol.Header_Id