CONNECT BY LEVEL을 사용할 때 매우 느린 쿼리

Randomystick

필요

Oracle SQL에서 다음과 같은 테이블을 만들고 싶습니다.

COUNTRY  NAME  WMWHSE_ID   DATE
   US     CRD2     1      040620
   GR     WAZ      2      040620
   CN     KOL      3      040620
   FR     DEL      4      040620
                  ...      ...
   US     CRD2     1      030620
   GR     WAZ      2      030620
   CN     KOL      3      030620
   FR     DEL      4      030620
                  ...      ...

WMWHSE_ID의 모든 창고는 오늘 날짜에 대한 DATE 열과 함께 인쇄되며 정확히 1 주일 전까지 DATE = 어제, 어제 전날, 그 전날 ... 등에 대해 반복됩니다. 총 124 개의 창고가 있으므로 124 * 7 = 총 868 행입니다.

===

쿼리 블록

다음은 내 질문입니다. CONNECT BY LEVEL <=을 사용하여 7 개의 날짜를 달성합니다 (이론상).

select 
SUBSTR(db_alias, 1, 2) AS COUNTRY, 
db_alias as NAME, 
To_Number(Regexp_Replace(Db_Logid, '[^0-9]', '')) As Wmwhse_Id, 
to_char(sysdate, 'yyyyMMdd')+1-level as ACTDATE 
from wmsadmin.pl_db, dual where db_alias not like '%BPV' and  db_alias not like 'PRDO%' and db_alias not like 'ENTERPRISE'
connect by level <=7
order by ACTDATE desc, WMWHSE_ID asc

(그것이 없으면 테이블이 다음과 같기 때문에 GROUP BY가 필요합니다.)

COUNTRY  NAME  WMWHSE_ID   DATE
   US     CRD2     1      040620
   GR     WAZ      2      040620
   CN     KOL      3      040620
   FR     DEL      4      040620
                  ...      ...
   US     CRD2     1      030620
   US     CRD2     1      030620
   US     CRD2     1      030620
   US     CRD2     1      030620
                  ...      ...

===

문제

쿼리 시간은 CONNECT BY LEVEL <= n에서 n으로 기하 급수적으로 증가하는 것 같습니다. 몇 가지 테스트를 실행하고 다음을 얻었습니다.

CONNECT BY LEVEL <= n      ROWS         SECONDS
         1                 124           2-6
         2                 248           10+?
         3                 372           110

n = 4 이상이면 sqldeveloper가 완전히 중단되는 것 같습니다. n = 7이면 컴퓨터를 30 분 이상 실행 한 채로두고 쿼리는 계속 실행되었습니다.

이 속도 저하의 원인은 무엇입니까? 내 테이블을 구현하는 더 좋은 방법이 있습니까? 시간 내 줘서 고마워.

Stibbons 숙고

쿼리가 왜 그렇게 느린가요? 각 반복은 각 행을 124 개의 새 행으로 연결하기 때문입니다. 따라서 두 번째 수준에서는 124 * 124 행이고 네 번째 수준에서는 236421376 행, 7 단계에서는 450766669594624 행이됩니다. 이것이 중복되는 이유입니다. 또한 이중으로 결합해도 영향이 없습니다.

해결책은 connect by부품 을 수정하고 조건을 추가하는 것입니다 wmwhse_id = prior wmwhse_id.

select country, name, wmwhse_id, trunc(sysdate) - level + 1 dt
  from pl_db 
  connect by level <= 7 and prior wmwhse_id = wmwhse_id and prior sys_guid() is not null 
  order by dt desc, wmwhse_id

대부분의 데이터베이스에서 표준 인 재귀 CTE를 사용하면 훨씬 더 쉽습니다.

with r(country, name, wmwhse_id, dt, lvl) as (
  select country, name, wmwhse_id, trunc(sysdate), 1 from pl_db union all
  select country, name, wmwhse_id, trunc(sysdate) - lvl, lvl + 1 from r where lvl < 7)
select country, name, wmwhse_id, dt from r;

그러나 가장 간단한 방법은 7 개의 숫자로 교차 결합을 만드는 것입니다. 생성 방법은 중요하지 않습니다.

select country, name, wmwhse_id, trunc(sysdate) - trim(column_value) + 1 dt
  from pl_db cross join xmltable('1 to 7')

세 가지 쿼리를 모두 포함하는 dbfiddle .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Eloquent를 사용할 때 매우 느린 쿼리 whereNotIn

분류에서Dev

Order By를 사용할 때 MySQL 쿼리가 매우 느려짐

분류에서Dev

팬더 - (압 연 GROUPBY을 ())를 사용하고 적용 할 때 매우 느리게 ()

분류에서Dev

GROUP BY를 사용하는 MySQL의 매우 느린 하위 쿼리

분류에서Dev

NULL을 확인할 때 SQL 쿼리의 선택적 매개 변수가 매우 느림

분류에서Dev

JestClient를 사용한 ElasticSearch 쿼리가 매우 느린 것 같습니다.

분류에서Dev

MySQL-매우 느린 SQL 쿼리

분류에서Dev

phpmyadmin에서 매우 느린 SQL 쿼리

분류에서Dev

매우 느린 쿼리 속도 향상

분류에서Dev

MSSQL 2016에서 매우 느린 쿼리

분류에서Dev

DataBinding을 사용하여 매우 느린 ListBox 채우기

분류에서Dev

MDX 쿼리는 SSIS 데이터 흐름 작업을 통해로드 할 때 매우 느립니다.

분류에서Dev

성공할 때까지 매우 느린 스크립트 실행

분류에서Dev

SQL 쿼리가 모든 행을 방문하고 매우 느린 이유

분류에서Dev

KafkaNativeOffsetManager를 사용할 때 Spring Integration Kafka 느린 메시지 처리

분류에서Dev

구체화 된 뷰와 결합 할 때 느린 쿼리

분류에서Dev

결과가 제한보다 적을 때 mysql 느린 쿼리

분류에서Dev

특정 열이 SELECT 문에있을 때 쿼리가 매우 느립니다.

분류에서Dev

조합 특성을 사용할 때 Visual Studio에서 NUnit이 매우 느림

분류에서Dev

LIMIT에도 불구하고 사용자 정의 함수를 사용하는 MySQL 매우 느린 쿼리

분류에서Dev

MySQL 느린 하위 쿼리, JOIN을 사용해야합니까?

분류에서Dev

EXPLAIN 출력을 사용하여 느린 MySQL 쿼리 최적화

분류에서Dev

대형 객체에 json 빌더를 사용할 때 IntelliJ 매우 느린 업데이트

분류에서Dev

SQL Server 쿼리 도움말 ... 매우 느린 쿼리

분류에서Dev

긴 문자열을 처리 할 때 Vim이 매우 느려졌습니다.

분류에서Dev

매우 느린 거대한 데이터베이스를 사용한 Neo4J 쿼리

분류에서Dev

Ubuntu 19.04로 업그레이드 할 때 파일 내용을 매우 느리게 수정

분류에서Dev

PhpStorm 8-인라인 HTML에서 파일을 처리 할 때 느리거나 느린 경험

분류에서Dev

다중 처리를 사용할 때 Python에서 느린 피클 덤프

Related 관련 기사

  1. 1

    Eloquent를 사용할 때 매우 느린 쿼리 whereNotIn

  2. 2

    Order By를 사용할 때 MySQL 쿼리가 매우 느려짐

  3. 3

    팬더 - (압 연 GROUPBY을 ())를 사용하고 적용 할 때 매우 느리게 ()

  4. 4

    GROUP BY를 사용하는 MySQL의 매우 느린 하위 쿼리

  5. 5

    NULL을 확인할 때 SQL 쿼리의 선택적 매개 변수가 매우 느림

  6. 6

    JestClient를 사용한 ElasticSearch 쿼리가 매우 느린 것 같습니다.

  7. 7

    MySQL-매우 느린 SQL 쿼리

  8. 8

    phpmyadmin에서 매우 느린 SQL 쿼리

  9. 9

    매우 느린 쿼리 속도 향상

  10. 10

    MSSQL 2016에서 매우 느린 쿼리

  11. 11

    DataBinding을 사용하여 매우 느린 ListBox 채우기

  12. 12

    MDX 쿼리는 SSIS 데이터 흐름 작업을 통해로드 할 때 매우 느립니다.

  13. 13

    성공할 때까지 매우 느린 스크립트 실행

  14. 14

    SQL 쿼리가 모든 행을 방문하고 매우 느린 이유

  15. 15

    KafkaNativeOffsetManager를 사용할 때 Spring Integration Kafka 느린 메시지 처리

  16. 16

    구체화 된 뷰와 결합 할 때 느린 쿼리

  17. 17

    결과가 제한보다 적을 때 mysql 느린 쿼리

  18. 18

    특정 열이 SELECT 문에있을 때 쿼리가 매우 느립니다.

  19. 19

    조합 특성을 사용할 때 Visual Studio에서 NUnit이 매우 느림

  20. 20

    LIMIT에도 불구하고 사용자 정의 함수를 사용하는 MySQL 매우 느린 쿼리

  21. 21

    MySQL 느린 하위 쿼리, JOIN을 사용해야합니까?

  22. 22

    EXPLAIN 출력을 사용하여 느린 MySQL 쿼리 최적화

  23. 23

    대형 객체에 json 빌더를 사용할 때 IntelliJ 매우 느린 업데이트

  24. 24

    SQL Server 쿼리 도움말 ... 매우 느린 쿼리

  25. 25

    긴 문자열을 처리 할 때 Vim이 매우 느려졌습니다.

  26. 26

    매우 느린 거대한 데이터베이스를 사용한 Neo4J 쿼리

  27. 27

    Ubuntu 19.04로 업그레이드 할 때 파일 내용을 매우 느리게 수정

  28. 28

    PhpStorm 8-인라인 HTML에서 파일을 처리 할 때 느리거나 느린 경험

  29. 29

    다중 처리를 사용할 때 Python에서 느린 피클 덤프

뜨겁다태그

보관