Sql 获取具有DISTINCT和rownum的记录
我在执行以下查询时遇到性能问题。获取结果花费的时间太长。它一次获取整个结果(比如3000个)。我试图使用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
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