KR101432700B1 - 쿼리의 최적화를 위한 방법 - Google Patents

쿼리의 최적화를 위한 방법 Download PDF

Info

Publication number
KR101432700B1
KR101432700B1 KR1020120112507A KR20120112507A KR101432700B1 KR 101432700 B1 KR101432700 B1 KR 101432700B1 KR 1020120112507 A KR1020120112507 A KR 1020120112507A KR 20120112507 A KR20120112507 A KR 20120112507A KR 101432700 B1 KR101432700 B1 KR 101432700B1
Authority
KR
South Korea
Prior art keywords
query
aggregation
join
subquery
sub
Prior art date
Application number
KR1020120112507A
Other languages
English (en)
Other versions
KR20140046257A (ko
Inventor
강봉재
박상영
이석원
최영재
Original Assignee
(주)티베로
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by (주)티베로 filed Critical (주)티베로
Priority to KR1020120112507A priority Critical patent/KR101432700B1/ko
Priority to US13/741,522 priority patent/US20140101130A1/en
Priority to CN201310349740.1A priority patent/CN103729392B/zh
Publication of KR20140046257A publication Critical patent/KR20140046257A/ko
Application granted granted Critical
Publication of KR101432700B1 publication Critical patent/KR101432700B1/ko
Priority to US14/606,586 priority patent/US10102248B2/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation
    • G06F16/24544Join order optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Operations Research (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

쿼리 최적화 방법은 SQL의 쿼리내 서브쿼리를 검색하는 단계와, 상기 검색된 서브쿼리로부터 스칼라 서브쿼리를 식별하는 단계와, 상기 식별된 스칼라 서브쿼리를 분석하여 코릴레이티드 스칼라 서브쿼리를 식별하는 단계, 및 상기 식별된 코릴레이티드 스칼라 서브쿼리의 결과 형태에 따라 상기 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 새로운 조인(join) 형태로 언네스트하는 단계를 포함한다.

Description

쿼리의 최적화를 위한 방법{METHOD FOR OPTIMIZING QUERY}
본 발명은 데이터베이스 관리 시스템의 쿼리 컴파일러에 관한 것으로서, 보다 상세하게는 쿼리의 최적화를 위한 방법에 관한 것이다.
일반적으로, 데이터베이스에는 서로 관련 있는 데이터들이 저장되어 있으며, 데이터베이스에 저장된 데이터들은 최신의 데이터로 갱신, 삽입, 삭제되는 것을 필요로 한다. 이를 위해 데이터베이스는 DBMS(DataBase Management System)라는 소프트웨어 시스템에 의해 관리되고 있다. DBMS는 응용 프로그램들이 원하는 데이터를 검색하거나 변경하여 언제나 일관성 있는 결과를 응용 프로그램에 제공해주는 종합적인 데이터 관리 시스템이다.
데이터베이스에 저장되어 있는 데이터를 가져오기 위해서는 구조화 질의어(SQL: Structrer Query Language)라는 쿼리 언어를 사용하여 쿼리를 작성한다. SQL 쿼리를 데이터베이스에서 수행할 수 있는 쿼리 수행 계획(query execution plan)으로 바꾸는 작업은 쿼리 컴파일러에서 수행된다. 쿼리 수행 계획은 쿼리 수행에 필요한 수행단위(operation)들을 노드로 하는 트리로 구성된다.
실제 쿼리 컴파일러에서 SQL 쿼리를 쿼리 수행 계획으로 바꾸는 작업은 다음과 같이 수행된다.
우선 쿼리를 파싱하여 파싱 트리의 구조로 만든다. 그런 다음, 쿼리 재작성 과정에서 파싱 트리는 의미는 같지만 더 일반적인 형태로 변형된다. 그 후 변형된 트리는 통계정보를 이용하여 최소 비용을 갖는 수행 계획으로 수행된다.
일반적으로 사용자가 입력한 쿼리를 파싱한 그대로 수행해도 올바른 결과가 나온다. 쿼리 재작성을 통해 파싱 트리를 더 일반적인 형태로 만드는 것은 수행 계획을 더 많이 만들 수 있도록 하기 위함이며, 이로써 최적화된 수행계획을 얻을 가능성을 높여줄 수 있다.
또한 쿼리 재작성은 쿼리에 포함되어 있지만 연산할 필요가 없는 부분을 제거하여 쿼리를 최적화해줌으로써 쿼리 컴파일러의 성능을 향상하기 위해서도 사용된다.
그러므로, 쿼리 컴파일러에서 최적화된 수행 계획이 수립될 수 있도록 쿼리를 최적화하는 것이 바람직하다.
그러므로, 본 발명은 쿼리를 최적화하기 위한 쿼리 컴파일러 및 그 방법을 제공하는 것을 그 목적으로 한다.
전술한 목적을 달성하기 위한 본 발명의 실시예에 따르면, 쿼리 최적화를 위한 방법 및 이를 위한 쿼리 컴파일러가 제공된다.
본 발명의 실시예에 따른 쿼리 최적화를 위한 방법은, SQL의 쿼리내 서브쿼리를 검색하는 단계와, 상기 검색된 서브쿼리로부터 스칼라 서브쿼리를 식별하는 단계와, 상기 식별된 스칼라 서브쿼리를 분석하여 코릴레이티드 스칼라 서브쿼리를 식별하는 단계, 및 상기 식별된 코릴레이티드 스칼라 서브쿼리의 반환 형태에 따라 상기 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 쿼지-조인(quasi-join)으로 언네스트하는 단계를 포함한다.
상기 실시예에서, 상기 검색된 서브쿼리로부터 스칼라 서브쿼리를 식별하는 단계는, 상기 검색된 서브쿼리에서 웨어(where) 절에 포함되면서 비교연산자와 함께 작성된 서브쿼리를 상기 스칼라 서브쿼리로 식별하는 단계를 포함한다.
상기 실시예에서, 상기 검색된 서브쿼리로부터 스칼라 서브쿼리를 식별하는 단계는, 상기 검색된 서브쿼리에서 셀렉트(select) 절에 포함되어 있는 서브쿼리를 상기 스칼라 서브쿼리로 식별하는 단계를 포함한다.
상기 실시예에서, 상기 식별된 스칼라 서브쿼리를 분석하여 코릴레이티드 스칼라 서브쿼리를 식별하는 단계는, 상기 스칼라 서브쿼리에서 상기 쿼리의 테이블에 포함된 컬럼을 사용하는 스칼라 서브쿼리를 상기 코릴레이티드 스칼라 서브쿼리로 식별하는 단계를 포함한다.
상기 실시예에서, 상기 쿼지-조인은 어그리게이션 이너/아우터 조인(aggregation inner/outer join) 및 맥스1로우 이너/아우터 조인(max1row inner/outer join)을 포함하며,
상기 어그리게이션 이너/아우터 조인(aggregation inner/outer join)은, 상기 쿼리의 로우(row)에 대해 조인되는 상기 코릴레이티드 스칼라 서브쿼리의 로우들을 어그리게이션(aggregation)하여, 상기 쿼리의 로우와 어그리게이션 값을 결과로 반환하며,
상기 맥스1로우 이너/아우터 조인(max1row inner/outer join)은, 상기 쿼리의 로우에 대해 조인되는 서브쿼리의 로우가 2개 이상일 때 에러(error)를 발생하고, 상기 쿼리의 로우와 조인된 서브쿼리의 로우를 결과로서 반환한다.
상기 실시예에서, 상기 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 쿼지-조인으로 언네스트하는 단계는, 상기 식별된 코릴레이티드 스칼라 서브쿼리가 어그리게이션 결과를 반환하는 형태일 때, 상기 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 어그리게이션 이너/아우터 조인(aggregation inner/outer join)으로 언네스트하는 단계를 포함한다.
상기 실시예에서, 상기 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 쿼지-조인으로 언네스트하는 단계는, 상기 식별된 코릴레이티드 스칼라 서브쿼리가 하나의 컬럼을 반환하는 형태일 때, 상기 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 맥스1로우 이너/아우터 조인(max1row inner/outer join)으로 언네스트하는 단계를 포함한다.
상기 실시예에서, 상기 쿼지-조인은 레프트 로우(left row)에 대해 조인(join)된 로우(row)들에 대해 조건적으로 이벤트(event) 형식으로 처리하는 조인 형태이다.
상기 실시예에서, 상기 어그리게이션 조인(aggregation join)과 맥스1로우 조인(max1row join)은 해쉬(hash), 머지(merge) 또는 네스티드 루프(nested loop) 중에서 어느 한 형태의 조인 메쏘드(join method)로 구현된다.
또한, 본 발명의 실시예에 따른 쿼리 최적화 방법은, SQL의 쿼리를 분석하여 인라인 뷰(inline view)를 식별하는 단계와, 상기 식별된 인라인 뷰(inline view)에서, 그룹 바이(group by)의 결과와 다른 테이블(table)이 N:1(데이블(table) :그룹 바이 위드 어그리게이션(group by with aggregation)) 혹은 1:1 로 조인(join) 될 때, 상기 쿼리를 어그리게이션 이너/아우터 조인(aggregation inner/outer join)으로 언네스트하며,
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
삭제
상기 어그리게이션 이너/아우터 조인(aggregation inner/outer join)은, 상기 언네스트된 쿼리의 로우(row)에 대해 조인되는 코릴레이티드 스칼라 서브쿼리의 로우들을 어그리게이션(aggregation)하여, 상기 언네스트된 쿼리의 로우와 어그리게이션 값을 결과로 반환한다.
또한, 상기 실시예에서, 쿼리 최적화 방법은, SQL의 쿼리를 분석하여 그룹 바이 위드 어그리게이션(Group by with aggregation) 아래에 조인(join)이 있고 한쪽의 키(key)가 그룹 바이 키(group by key)로 사용되며 다른 쪽 컬럼으로 어그리게이션(aggregation)만 사용될 때, 상기 그룹 바이 위드 어그리게이션(group by with aggregation)을 갖는 쿼리를 어그리게이션 이너/아우터 조인(aggregation inner/outer join)으로 언네스트하며,
상기 어그리게이션 이너/아우터 조인(aggregation inner/outer join)은, 상기 언네스트된 쿼리의 로우(row)에 대해 조인되는 코릴레이티드 스칼라 서브쿼리의 로우들을 어그리게이션(aggregation)하여, 상기 언네스트된 쿼리의 로우와 어그리게이션 값을 결과로 반환한다.
전술한 바와 같이, 쿼리에 포함된 코릴레이티드 스칼라 서브쿼리를 조인(join) 방식으로 변환하여 종래 기술에 비해 쿼리 수행 계획을 더 많이 만들어내는 가능성을 늘리고 그로 인한 쿼리 컴파일러에서 쿼리의 수행 속도가 개선될 수 있다.
도 1은 본 발명이 적용되는 데이터베이스 관리 시스템에서 사용하는 쿼리 컴파일러의 블록 구성도이다.
도 2는 본 발명의 실시예에 따라서 쿼리의 최적화를 위한 방법을 설명하는 흐름도이다.
도 3a 및 도 3b는 본 발명의 실시예에 따라 각기 코릴레이티드 스칼라 서브쿼리를 갖는 메인 쿼리를 어그리게이션 이너 조인(aggregation inner join) 및 ㅇ어그리게이션 아우터 조인(gregation outer join) 형태로 언네스트하는 절차를 도시한다.
도 4a 및 도 4b는 본 발명의 실시예에 따라 각기 코릴레이티드 스칼라 서브쿼리를 갖는 메인 쿼리를 맥스1로우 이너 조인(max1row inner join) 및 맥스1로우 아우터 조인(max1row outer join) 형태로 언네스트하는 절차를 도시한다.
도 5a 및 도 5b는 본 발명의 실시예에 따라 코릴레이티드 스칼라 서브쿼리 이외의 서브쿼리를 갖는 쿼리를 어그리게이션 조인(aggregation join) 형태로 언네스트하는 절차를 도시한다.
이하 본 발명의 실시예는 첨부 도면을 참조하여 다음과 같이 상세히 설명될 것이다.
이제 도 1을 참조하면, 본 발명이 적용되는 데이터베이스 관리 시스템에서 사용하는 쿼리 컴파일러(10)의 블록 구성도가 도시된다. 쿼리 컴파일러(10)는 파서(12), 쿼리 재작성기(14), 쿼리 옵티마이저(16)를 포함한다.
파서(12)는 쿼리 컴파일러(10)에 제공되는 쿼리를 파싱하여 파싱 트리의 구조로 형성한다. 파서(12)에 의해 수행되는 파싱 과정에서 쿼리에 문법적 오류가 없는지 의미상의 오류가 없는지 확인되며, 쿼리 재작성(query rewrite) 과정으로 넘어가게 된다. 쿼리 재작성기(14)는 파싱 트리 구조를 갖는 쿼리를 더 일반적인 형태로 만들어 다음 단의 쿼리 옵티마이저(16)에서 더 많은 수행 계획을 만들 수 있도록 한다. 쿼리 옵티마이저(16)는 통계 정보를 이용하여 변형된 트리 구조를 갖는 쿼리로부터 다수의 실행 계획을 생성하고, 그 중 최소 비용, 최적의 경로, 및 최적의 효율을 갖는 실행 계획을 선택한다. 쿼리 옵티마이저(16)에 의해 생성된 최적의 실행 계획에 따라 쿼리가 실행되어 그 결과를 반환하게 된다.
따라서, 쿼리 재작성기(14)는 쿼리 옵티마이저(16)에서 더 많은 수행 계획을 만들 수 있도록 쿼리를 더 일반적인 형태로 만들어 주고, 또한 연산할 필요가 없는 서브쿼리를 제거하도록 구성되는 것이 바람직하다.
쿼리 재작성 작업에는 여러 가지가 있지만 대표적인 것들만 나열해보면 다음과 같다.
1. 아우터 조인 심플리피케이션(Outer join simplification):
이 작업은 SQL 쿼리 내에 아우터 조인(outer join)이 있지만 스키마 정보나 웨어(where)에 쓰인 조건에 의해 아우터 조인(outer join)이 아닌 이너 조인(inner join)이 되는 경우 이너 조인(inner join)으로 변경한다.
2. 심플 뷰 머징(Simple view merging):
이 작업은 SQL 쿼리에 뷰(view)가 사용된 경우 뷰(view)를 없애고, 해당 쿼리를 상단 쿼리 블록 또는 메일 쿼리에 병합한다.
3. 익스프레션 리라이팅(Expression rewriting):
이 작업은 쿼리에 포함된 익스프레션(expression)이 간단하게 미리 수행 가능한 익스프레션(expression)이나 복잡하고 수행이 오래 걸리는 익스프레이션(expression)이지만 간단한 익스프레이션(expression)으로 표현이 가능한 경우 해당 쿼리를 변경한다.
4. 서브쿼리 언네스팅(Subquery unnesting):
이 작업은 쿼리에 포함된 서브쿼리(subquery)를 풀어서 해당 쿼리를 상단 쿼리 블록에 병합하여 쿼리와 서브쿼리 간의 계층 구조를 서로 같은 레벨로 만들어 주는 것이다.
전술한 쿼리 재작성 작업 중에서 4번의 서브쿼리 언네스팅(subquery unnesting)은 본 발명의 실시예와 관련된다.
전술한 서브쿼리 언네스팅에서 언네스트되는 서브쿼리는 다음과 같이 4가지로 분류될 수 있다.
4-1. 언코릴레이티드 스칼라 서브쿼리(uncorrelated scalar subquery):
이 서브쿼리는 상단 쿼리 블록에서 컬럼을 공급받지 않고 하나의 결과만을 반환하는 서브쿼리를 말한다. 예를 들면, 다음과 같이 작성된 서브쿼리를 들 수 있다.
select emp_no from emp
where salary = ( select max ( salary ) from emp )
4-2. 언코릴레이티드 논-스칼라 서브쿼리(uncorrelated non-scalar subquery):
이 서브쿼리는 상단 쿼리 블록에서 컬럼을 공급받지 않고 결과를 세트(set)로 반환하는 서브쿼리이다. 예를 들면, 다음과 같이 작성된 서브쿼리를 들 수 있다.
select emp_no from emp
where dept_code in
( select dept _ code from dept where company = ' tibero'
4-3. 코릴레이티드 스칼라 서브쿼리(correlated scalar subquery):
이 서브쿼리는 메인 쿼리에서 컬럼을 공급받아서 하나의 결과만을 반환하는 서브쿼리이다. 예를 들면, 다음과 같이 작성된 서브쿼리를 들 수 있다.
select emp_no from emp m
where salary = ( select max ( salary ) from emp s
where s. dept _ code = m.dept_code)
4-4. 코릴레이티드 논-스칼라 서브쿼리(correlated non-scalar subquery):
이 서브쿼리는 컬럼을 공급받아서 결과를 세트(set)로 반환하는 서브쿼리이다. 예를 들면, 다음과 같이 작성된 서브쿼리를 들 수 있다
select emp_no from emp m
where sold_item in ( select sold _ item from item s
where s. htd > m. speciality )
전술한 서브쿼리들 중 4-1에 기술된 서브쿼리는 그의 결과값이 항상 같기 때문에 언네스트(unnest) 할 필요가 없지만, 4-2 내지 4-4에 기술된 서브쿼리는 언네스트하는 것이 필요하다.
4-2의 서브쿼리는 코릴레이트가 되어 있지 않아서 언네스트를 안 해도 될 것 같지만 서브쿼리의 내부에 있는 테이블(table)의 크기가 커지면 메모리(memory) 상에 서브쿼리결과를 들고 있으면서 메인 쿼리의 로우(row)마다 서브쿼리의 결과와 비교해야 되므로 언네스트를 하는 것이 좋을 수 있다.
4-3 및 4-4에 기술된 서브쿼리는 코릴레이트되어 있기 때문에 메인 쿼리의 로우(row) 마다 서브쿼리를 수행해야 하므로 언네스트를 하는 것이 항상 좋다.
예를 들면, 아래와 같은 코릴레이티드 스칼라 서브쿼리를 포함한 메인 쿼리가 있을 때, 이 메인 쿼리는 관련기술에서 아래와 같이 여러 방식으로 처리될 수도 있다. 이 쿼리는 부서마다 가장 연봉을 많이 받는 사원을 뽑는 쿼리이다.
select emp_name
from emp m
where salary = (select max (salary)
from emp s
where m.dept_code = s.dept_code)
(1) 메인 쿼리 내 스칼라 서브쿼리를 풀지 않고 서브쿼리에 코릴레이티드 볼륨(correlated value)을 로우 바이 로우(row by row)로 전달하여 서브쿼리 결과 값을 이용한 필터(filter)로 처리한다.
(2) 메인 쿼리 내 스칼라 서브쿼리의 결과가 어그리게이션(aggregation)일 경우에는 아래와 같이 처리한다.
select emp_name
from emp m,
(select dept_code, max (salary) maxsalary
from emp group by dept_code) s
where m.dept_code= s.dept_code and m.salary = s.maxsalary
즉, 위와 같은 형식으로 인라인 뷰(inline view)에서 그룹 바이(group by)와 어그리게이션(aggregation)을 한 후 그에 대한 조인(join)으로 처리한다.
(3) 2번의 처리 방식에서 메인 쿼리의 로우(row)에 대한 키로 로우아이디(rowid)를 추가하여 그룹 바이(group by)를 조인(join) 위로 올릴 수도 있다. 이를 SQL 쿼리로 나타내면 다음과 같다.
select emp_name
from (select m.emp_name, m.salary, max (s.salary) maxsalary
from emp m, emp s
where m.dept_code = s.dept_code
group by m. rowid, m.emp_name, m.salary)
where salary = maxsalary
전술한 (1)번의 처리 방식은 코릴레이티드 볼륨(correlated value)의 디스팅크트 카운트(distinct count)가 작을 경우 스칼라 서브쿼리의 캐쉬(cache)를 사용하면 빠르지만 반대의 경우에는 부서코드(dept_code)의 디스팅크트 카운트(distinct count)만큼 서브쿼리를 수행해야 되는 단점이 있다.
전술한 (2)번의 처리 방식은 코릴레이티드 볼륨(correlated value)의 디스팅크트 카운트(distinct count)가 많을 경우 한번의 그룹 바이(group by) 후에 조인(join)을 하게 되어 첫 번째 방식보다 좋고 디스팅크트 카운트(distinct count)가 작을 경우는 네스티드 루프(nested loop) 형식으로 처리하면 위와 같지만 캐쉬(cache)가 없어서 같은 값에 대해서도 다시 계산되어 안 좋지만 해쉬 조인(hash join) 형식으로 처리하면 데이터에 따라 장단을 논하기 어렵다. 하지만 이 방식은 추가적으로 그룹 바이(group by)를 하기 때문에 그에 대한 메모리(memory) 및 처리 시간이 더 들어가는 문제가 있다.
전술한 (3)번의 처리 방식은 조인(join)에서 줄어드는 양이 많은 경우에 2번의 처리 방식보다 좋지만 그렇지 않은 경우 조인(join)에서 결과로 나가는 로우(row)가 그룹 바이(group by)가 아래 있을 때보다 처리할 로우(row)양이 훨씬 많아져서 안 좋을 수 있다. 그리고 이 방식도 추가적인 그룹 바이(group by)를 수행한다.
서브쿼리 결과가 컬럼일 경우 아래의 쿼리처럼 작성될 수 있다.
select emp_name,
(select dept_name from dept s
where m.dept_code = s.dept_code)
from emp m
위와 같은 SQL의 경우 메인쿼리의 로우(row) 하나당 서브쿼리의 결과가 하나만 나와야 되지만, 전술한 2,3,4 번 처리방식으로 서브쿼리를 언네스팅(unnesting)하게 되면 서브쿼리 결과가 1개 이상 나오는 경우에 대한 에러처리를 할 수가 없다. 그래서 서브쿼리를 언네스트(unnest) 하지 않기 때문에, 서브쿼리의 수행 작업이 많아 질 수 있다.
본 발명의 발명자들은 코릴레이티드 스칼라 서브쿼리를 새로운 형태의 조인(join) 방식으로 변환하게 되면, 조인 메쏘드(join method)(네스티드 루프(NESTED LOOP), 해쉬(HASH), 머지(MERGE))로 전술한 (1), (2) 번 방식을 포함하게 되고 여러 노드에서 처리하는 일을 조인(join) 노드로 가져가게 되면서 내부적으로 캐쉬(cache) 및 단축키(shortcut)를 사용하여 수행시간을 줄일 수 있다는 것을 수많은 쿼리의 수행과 반복 작업을 통하여 알게 되었다.
본 발명의 실시예에 따르면, 쿼리 컴파일러(10)는 사용자가 입력한 SQL의 쿼리에서 서브쿼리를 검색하고, 검색된 서브쿼리로부터 SQL의 규약에 규정된 스칼라 서브쿼리를 식별하고, 이렇게 식별된 스칼라 서브쿼리를 분석하여 코릴레이티드 스칼라 서브쿼리를 식별하며, 식별된 코릴레이티드 스칼라 서브쿼리의 결과 형태에 따라 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 새로운 조인(join) 형태로 동작하도록 변환한다.
여기서 새로운 조인(join) 형태는 어그리게이션 (이너/아우터) 조인 및 맥스1로우 (이너/아우터) 조인을 포함한다. 이러한 새로운 조인(join) 형태는 통상의 SQL의 형태로 표현될 수 없는 본 발명자들에 의해 새로이 제안된 조인(join) 방법이며, 편의상 본 실시예에서 쿼지-조인(quais-join)이라 지칭하기로 한다.
이하, 도 2를 참조하여, 쿼리 컴파일러(10)에 의해 수행되는 쿼리 최적화를 위한 방법을 설명한다. 도 2는 본 발명의 실시예에 따라서 쿼리 최적화를 위한 방법을 설명하는 흐름도이다.
먼저, 단계(22)에서, 쿼리 컴파일러(10)의 쿼리 재작성기(14)는 SQL의 쿼리의 텍스트를 분석하여 메인 쿼리 내 서브쿼리의 존재를 검색한다.
그 다음 단계(24)에서, 쿼리 컴파일러(10)의 쿼리 재작성기(14)는 검색된 서브쿼리들로부터 웨어(where) 절에 포함되면서 인(in)이나 이그지스트(exist) 같은 집합 연산자가 아닌 비교연산자(=, >)와 같이 쓰인 서브쿼리이거나 셀렉트(select) 절에 포함되어 있는 서브쿼리를 스칼라 서브쿼리로 식별한다.
그 다음 단계(26)에서, 식별된 스칼라 서브쿼리를 분석하여 코릴레이티드 스칼라 서브쿼리를 식별하는 단계가 수행된다. 이 식별 단계는 메인 쿼리의 테이블에 포함된 컬럼을 사용하는 스칼라 서브쿼리(들)를 코릴레이티드 스칼라 서브쿼리로 식별한다.
그 다음 단계(28)에서 코릴레이티드 스칼라 서브쿼리의 결과 형태에 따라 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 본 발명의 실시예에 따른 새로운 조인(join) 형태로 변환한다.
쿼리 컴파일러(10)의 쿼리 재작성기(14)는 단계(28)에서 식별된 코릴레이티드 스칼라 서브쿼리가 어그리게이션 결과를 반환하는 형태일 때, 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 어그리게이션 이너/아우터 조인(aggregation inner/outer join)으로 언네스트한다 (단계 30). 어그리게이션 이너/아우터 조인(aggregation inner/outer join)은 메인쿼리의 로우(row)에 대해 조인(join)되는 코릴레이티드 스칼라 서브쿼리의 로우(row)들을 어그리게이션(aggregation)하여, 메인 쿼리의 로우(row)와 어그리게이션(aggregation) 값을 결과로 반환하는 작업을 수행한다.
도 3a는 예를 들면 아래와 같은 코릴레이티드 스칼라 서브쿼리를 갖는 메인 쿼리를 어그리게이션 이너 조인(aggregation inner join) 형태로 언네스트하는 절차를 도시한다. 다음 쿼리는 마찬가지로 다음 쿼리는 각 부서에서 최고 연봉을 받는 사원들을 출력하는 SQL이다.
select emp_name
from emp m
where salary = (select max (salary)
from emp s
where m.dept_c_code = s.dept_code
도 3b는 예를 들면 아래와 같은 코릴레이티드 스칼라 서브쿼리를 갖는 메인 쿼리를 어그리게이션 아우터 조인(aggregation outer join) 형태로 언네스트하는 절차를 예시적으로 도시한다. 다음 쿼리는 마찬가지로 부서별 연봉합을 출력하는 SQL이다.
select dept_name
(select sum (salary)
from emp s
where m.dept_code = s.dept_code)
from dept m
그러나, 쿼리 컴파일러(10)의 쿼리 재작성기(14)는 단계(28)에서 식별된 코릴레이티드 스칼라 서브쿼리가 하나의 컬럼을 반환하는 형태라고 판단되면, 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 맥스1로우 이너/아우터 조인(max1row inner/outer join)의 형태로 언네스트한다 (단계 32). 맥스1로우 이너/아우터 조인(max1row inner/outer join)은 메인 쿼리의 로우(row)에 대해 조인(join)되는 서브쿼리의 로우(row)가 2개 이상일 때 에러(error)를 발생하고, 메인 쿼리의 로우(row)와 조인(join)된 서브쿼리의 로우(row)를 결과로서 반환하는 작업을 수행한다.
도 4a는 예를 들면 아래와 같은 코릴레이티드 스칼라 서브쿼리를 갖는 메인 쿼리를 맥스1로우 이너 조인(max1row inner join) 형태로 언네스트하는 절차를 도시한다. 이 쿼리는 부서장의 이름을 출력하는 SQL이다.
select emp_name
from emp m
where emp_no =
(select dept_boss_no
from dept s
where m.dept_code = s.dept_code)
도 4b는 예를 들면 아래와 같은 코릴레이티드 스칼라 서브쿼리를 갖는 메인 쿼리를 맥스1로우 아우터 조인(max1row outer join) 형태로 언네스트하는 절차를 도시한다. 이 쿼리는 사원의 이름과 사원이 속한 부서 이름을 출력하는 쿼리이다.
select emp_name,
(select dept_name from depts.
where e.dept_code = d.dept_code)
from emp m
도 3a, 도 3b 및 도 4a, 도 4b로부터 알 수 있는 바와 같이, 본 실시예에 따른 새로운 조인(join) 형태의 쿼지-조인은 레프트 로우(left row)에 대해 조인(join)된 로우(row)들에 대해 조건적으로 이벤트(event) 형식으로 처리하는 형태를 갖는다.
본 실시예의 새로운 join 형태는 본 발명자들에 의해 새로이 만들어졌기 때문에 통상의 SQL의 형태로 표현될 수 없다. 따라서, 쿼리 컴파일러(10)에서 실제로 수행될 때, 코릴레이티드 스칼라 서브쿼리를 삭제하고 해당 서브쿼리를 포함하는 메인 쿼리를 join으로 동작하도록 변환함으로써 쿼리 옵티마이저(16)에서 다수의 쿼리 수행 계획을 만들게 된다.
본 실시예의 새로운 조인(join) 형태의 어그리게이션 조인(aggregation join)은 기존 조인(join) 방식처럼 해쉬 조인(hash join), 네이스트 루프 조인(nested loop join), 머지 조인(merge join)을 포함하는 조인 메쏘드(join method)를 지원하며, 왼쪽 로우(row)와 조인(join)된 오른쪽 로우(row)들의 어그리게이션(aggregation)이 출력되는 결과를 반환한다.
반면, 본 실시예의 새로운 조인(join) 형태의 맥스1로우 조인(Max1row join)은 전술한 어그리게이션 조인(aggregation join)과 마찬가지로 해쉬 조인(hash join), 네스티드 루프 조인(nested loop join), 머지 조인(merge join)의 조인 메쏘드(join method)를 지원하며, 차이점은 왼쪽의 로우(row)에 대해 조인(join) 되는 오른쪽 로우(row)가 2개 이상인 경우 에러(error)를 발생한다.
전술한 실시예는 코릴레이티드 스칼라 서브쿼리를 갖는 메인 쿼리를 새로운 조인(join) 형태로 변환하는 방법에 대하여 기술하였다.
본 발명에 따르면, 코릴레이티드 스칼라 서브쿼리뿐만 아니라 다른 형태의 서브쿼리의 경우에도 본 실시예에 따른 새로운 조인(join) 형태로 변환할 수 있다. 예를 들면, 전술한 종래기술의 2번 및 3번의 처리방식에서 예를 든 SQL 쿼리는 코릴레이티드 스칼라 서브쿼리를 갖는 SQL 쿼리와 동일한 결과를 반환하는 SQL 쿼리이기 때문에 본 실시예의 어그리게이션 조인(aggregation join) 을 적용할 수 있다.
상세히 말해서, 종래기술의 2번의 처리방식의 경우, 일반적인 조인(join)에서 조인(join)에 참여하는 테이블이 그룹 바이 위드 어그리게이션(group by with aggregation)인 인라인 뷰(inline view)일 때 어그리게이션(aggregation)이 포함되지 않은 조인 프레디키트(join predicate)들로 다른 쪽 테이블과 뷰(view) 가 N : 1 혹은 1 : 1 로 조인(join) 되는 경우도 그룹 바이 위드 어그리게이션(group by with aggregation)을 없애고 본 실시예의 쿼지-조인의 어그리게이션 조인(aggregation join)으로 변환할 수 있다. 결국 조인(join)과 아래쪽의 그룹 바이 위드 어그리게이션(group by with aggregation)이 어그리게이션 조인(aggregation join)으로 합쳐진다는 의미이다. 다른 쪽 테이블과 뷰(view)가 N : 1로 조인(join) 된다는 의미는 테이블에 로우(row)에 대해서 뷰(view)의 로우(row)는 항상 1개의 로우(row)만 조인(join)이 된다는 의미이다. 그러나, 그 반대는 성립되지 않는다.
도 5a는 예를 들면 아래와 같은 조인(join) 에서 그룹 바이 위드 어그리게이션(group by with aggregation)을 갖는 SQL 쿼리를 없애고 어그리게이션 조인(aggregation join) 형태로 언네스트하는 절차를 도시한다. 이 쿼리는 각 부서에서 최고 연봉을 받는 사원들을 출력하는 SQL이다.
select emp_name
from emp m,
(select dept_code, max (salary) maxsalary
from emp group by dept_code) s
where m.dept_code= s.dept_code and m.salary = s.maxsalary
한편, 종래기술의 3번의 처리방식에서, 조인(join) 위에 그룹 바이 위드 어그리게이션(group by with aggregation)이 있는 경우 그룹 바이(group by)의 키(key) 컬럼으로 한 쪽 테이블의 키(key) 컬럼 (테이블 내에서 로우(row)에 중복되는 값이 없는 유니크(unique)한 컬럼 조합)들이 포함되고 다른 쪽 테이블에서는 어그리게이션(aggregation)으로만 결과가 나가는 경우이다. 쿼리의 형태를 보면 다음 같은 경우이다. 이 쿼리는 마찬가지로 각 부서에서 최고 연봉을 받는 사원들을 출력하는 SQL이다.
select emp_name
from (select m.emp_name, m.salary, max (s.salary) maxsalary
from emp m, emp s
where m.dept_code = s.dept_code group by m.rowid, m.emp_name, m.salary)
where salary = maxsalary
쿼리에서 보듯이 m, s를 조인(join)한 후 m의 로우아이디(rowid), 직원이름(emp_name), 부서코드(dept_code), 급여(salary)에 대해 그룹화하기를 했는데 rowid는 emp에서 유니크(unique)한 값이고 s에 대해서는 max (s.salary)만 사용했기에 어그리게이션 조인(aggregation join)을 만들게 된다.
도 5b는 전술한 SQL 쿼리를 어그리게이션 조인(aggregation join) 형태로 언네스트하는 절차를 도시한다.
그러므로, 전술한 바와 같이, 쿼리에 포함된 코릴레이티드 스칼라 서브쿼리를 조인(join) 방식으로 변환하여 쿼리 컴파일러에서 쿼리의 수행 속도가 개선될 수 있다.
10 : 쿼리 컴파일러 12: 파서
14: 쿼리 재작성기 16: 쿼리 옵티마이저

Claims (20)

  1. 쿼리 최적화 방법에 있어서,
    SQL(Structrer Query Language)의 쿼리내 서브쿼리를 검색하는 단계와,
    상기 검색된 서브쿼리로부터 스칼라 서브쿼리를 식별하는 단계와,
    상기 식별된 스칼라 서브쿼리를 분석하여 코릴레이티드 스칼라 서브쿼리를 식별하는 단계, 및
    상기 식별된 코릴레이티드 스칼라 서브쿼리의 반환 형태에 따라 상기 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 쿼지-조인(quasi-join)으로 언네스트하는 단계
    를 포함하는 쿼리 최적화 방법.
  2. 제1항에 있어서, 상기 검색된 서브쿼리로부터 스칼라 서브쿼리를 식별하는 단계는,
    상기 검색된 서브쿼리에서
    웨어(where) 절에 포함되면서 비교연산자와 함께 작성된 서브쿼리를 상기 스칼라 서브쿼리로 식별하는 단계를 포함하는 쿼리 최적화 방법.
  3. 제1항에 있어서, 상기 검색된 서브쿼리로부터 스칼라 서브쿼리를 식별하는 단계는,
    상기 검색된 서브쿼리에서
    셀렉트(select) 절에 포함되어 있는 서브쿼리를 상기 스칼라 서브쿼리로 식별하는 단계를 포함하는 쿼리 최적화 방법.
  4. 제1항에 있어서, 상기 식별된 스칼라 서브쿼리를 분석하여 코릴레이티드 스칼라 서브쿼리를 식별하는 단계는,
    상기 스칼라 서브쿼리에서 상기 쿼리의 테이블에 포함된 컬럼을 사용하는 스칼라 서브쿼리를 상기 코릴레이티드 스칼라 서브쿼리로 식별하는 단계를 포함하는 쿼리 최적화 방법.
  5. 제1항에 있어서, 상기 쿼지-조인은 어그리게이션 이너/아우터 조인(aggregation inner/outer join) 및 맥스1로우 이너/아우터 조인(max1row inner/outer join)을 포함하며,
    상기 어그리게이션 이너/아우터 조인(aggregation inner/outer join)은,
    상기 쿼리의 로우(row)에 대해 조인되는 상기 코릴레이티드 스칼라 서브쿼리의 로우들을 어그리게이션(aggregation)하여, 상기 쿼리의 로우와 어그리게이션 값을 결과로 반환하며,
    상기 맥스1로우 이너/아우터 조인(max1row inner/outer join)은,
    상기 쿼리의 로우에 대해 조인되는 서브쿼리의 로우가 2개 이상일 때 에러(error)를 발생하고, 상기 쿼리의 로우와 조인된 서브쿼리의 로우를 결과로서 반환하는 쿼리 최적화 방법.
  6. 제5항에 있어서, 상기 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 쿼지-조인으로 언네스트하는 단계는,
    상기 식별된 코릴레이티드 스칼라 서브쿼리가 어그리게이션 결과를 반환하는 형태일 때, 상기 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 어그리게이션 이너/아우터 조인(aggregation inner/outer join)으로 언네스트하는 단계를 포함하는 쿼리 최적화 방법.
  7. 제5항에 있어서, 상기 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 쿼지-조인으로 언네스트하는 단계는,
    상기 식별된 코릴레이티드 스칼라 서브쿼리가 하나의 컬럼을 반환하는 형태일 때, 상기 식별된 코릴레이티드 스칼라 서브쿼리를 갖는 쿼리를 맥스1로우 이너/아우터 조인(max1row inner/outer join)으로 언네스트하는 단계를 포함하는 쿼리 최적화 방법.
  8. 제1항에 있어서, 상기 쿼지-조인은 레프트 로우(left row)에 대해 조인(join)된 로우(row)들에 대해 조건적으로 이벤트(event) 형식으로 처리하는 쿼리 최적화 방법.
  9. 제5항에 있어서,
    상기 어그리게이션 조인(aggregation join)과 맥스1로우 조인(max1row join)은 해쉬(hash), 머지(merge) 또는 네스티드 루프(nested loop) 중에서 어느 한 형태의 조인 메쏘드(join method)로 구현되는 쿼리 최적화 방법.
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 쿼리 최적화 방법에 있어서,
    SQL(Structrer Query Language)의 쿼리를 분석하여 인라인 뷰(inline view)를 식별하는 단계와,
    상기 식별된 인라인 뷰(inline view)에서, 그룹 바이(group by)의 결과와 다른 테이블(table)이 N:1(테이블(table) :그룹 바이 위드 어그리게이션(group by with aggregation)) 혹은 1:1로 조인(join) 될 때,
    상기 쿼리를 어그리게이션 이너/아우터 조인(aggregation inner/outer join)으로 언네스트하며,
    상기 어그리게이션 이너/아우터 조인(aggregation inner/outer join)은,
    상기 언네스트된 쿼리의 로우(row)에 대해 조인되는 코릴레이티드 스칼라 서브쿼리의 로우들을 어그리게이션(aggregation)하여, 상기 언네스트된 쿼리의 로우와 어그리게이션 값을 결과로 반환하는 쿼리 최적화 방법.
  20. 쿼리 최적화 방법에 있어서,
    SQL(Structrer Query Language)의 쿼리를 분석하여 그룹 바이 위드 어그리게이션(Group by with aggregation) 아래에 조인(join)이 있고 한쪽의 키(key)가 그룹 바이 키(group by key)로 사용되며 다른 쪽 컬럼으로 어그리게이션(aggregation)만 사용될 때, 상기 그룹 바이 위드 어그리게이션(group by with aggregation)을 갖는 쿼리를 어그리게이션 이너/아우터 조인(aggregation inner/outer join)으로 언네스트하며,
    상기 어그리게이션 이너/아우터 조인(aggregation inner/outer join)은,
    상기 언네스트된 쿼리의 로우(row)에 대해 조인되는 코릴레이티드 스칼라 서브쿼리의 로우들을 어그리게이션(aggregation)하여, 상기 언네스트된 쿼리의 로우(row)와 어그리게이션 값을 결과로 반환하는 쿼리 최적화 방법.
KR1020120112507A 2012-10-10 2012-10-10 쿼리의 최적화를 위한 방법 KR101432700B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020120112507A KR101432700B1 (ko) 2012-10-10 2012-10-10 쿼리의 최적화를 위한 방법
US13/741,522 US20140101130A1 (en) 2012-10-10 2013-01-15 Join type for optimizing database queries
CN201310349740.1A CN103729392B (zh) 2012-10-10 2013-08-12 查询优化方法及查询编译器
US14/606,586 US10102248B2 (en) 2012-10-10 2015-01-27 Join type for optimizing database queries

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020120112507A KR101432700B1 (ko) 2012-10-10 2012-10-10 쿼리의 최적화를 위한 방법

Publications (2)

Publication Number Publication Date
KR20140046257A KR20140046257A (ko) 2014-04-18
KR101432700B1 true KR101432700B1 (ko) 2014-08-25

Family

ID=50433546

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120112507A KR101432700B1 (ko) 2012-10-10 2012-10-10 쿼리의 최적화를 위한 방법

Country Status (3)

Country Link
US (1) US20140101130A1 (ko)
KR (1) KR101432700B1 (ko)
CN (1) CN103729392B (ko)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9607042B2 (en) 2013-09-16 2017-03-28 Mastercard International Incorporated Systems and methods for optimizing database queries
US9836506B2 (en) * 2014-06-11 2017-12-05 International Business Machines Corporation Dynamic query optimization with pilot runs
WO2016208779A1 (ko) * 2015-06-22 2016-12-29 (주) 비아이매트릭스 대용량 데이터를 처리하기 위한 2단계 쿼리 기반 온라인 분석 프로세싱 방법
US10127277B2 (en) 2015-07-31 2018-11-13 International Business Machines Corporation Outer join optimizations in database management systems
US10496760B2 (en) 2015-10-21 2019-12-03 International Business Machines Corporation Partitioned joins in analytical databases
US9778973B2 (en) 2015-10-28 2017-10-03 International Business Machines Corporation Early diagnosis of hardware, software or configuration problems in data warehouse system utilizing grouping of queries based on query parameters
KR101797483B1 (ko) * 2016-07-19 2017-11-15 주식회사 티맥스데이터 데이터베이스 관리 시스템에서 쿼리를 프로세싱하기 위한 기법
CN108664516A (zh) * 2017-03-31 2018-10-16 华为技术有限公司 查询优化方法及相关装置
CN107315790B (zh) * 2017-06-14 2021-07-06 腾讯科技(深圳)有限公司 一种非相关子查询的优化方法和装置
CN110019296B (zh) * 2017-09-29 2021-04-23 北京国双科技有限公司 数据库查询脚本的生成方法、装置、存储介质及处理器
US10733187B2 (en) * 2018-02-09 2020-08-04 International Business Machines Corporation Transforming a scalar subquery
CN108549688B (zh) * 2018-04-11 2020-10-16 上海达梦数据库有限公司 一种数据操作的优化方法、装置、设备和存储介质
US11048815B2 (en) * 2018-08-06 2021-06-29 Snowflake Inc. Secure data sharing in a multi-tenant database system
CN109753520B (zh) * 2019-01-28 2021-01-26 上海达梦数据库有限公司 半连接查询方法、装置、服务器及存储介质
CN110096514A (zh) * 2019-04-01 2019-08-06 跬云(上海)信息科技有限公司 数据查询方法和装置
US10885035B2 (en) * 2019-04-26 2021-01-05 Advanced New Technologies Co., Ltd. Method and system for outer join of database tables
CN111026776B (zh) * 2019-11-06 2020-10-02 中科驭数(北京)科技有限公司 关系型数据库中的查询方法及装置
US11714810B2 (en) * 2021-03-25 2023-08-01 Oracle International Corporation Join-based containment for set operation-based sub query removal
US11886411B2 (en) 2021-05-24 2024-01-30 Molecula Corp. Data storage using roaring binary-tree format
CN113407791A (zh) * 2021-06-18 2021-09-17 南方电网数字电网研究院有限公司 数据查询系统、方法、装置、计算机设备和存储介质
WO2023272567A1 (en) * 2021-06-30 2023-01-05 Huawei Technologies Co., Ltd. Method and system for providing context-sensitive, non-intrusive data processing optimization framework
CN114356966B (zh) * 2022-03-21 2022-06-03 北京奥星贝斯科技有限公司 数据库语句的处理方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030047889A (ko) * 2000-05-26 2003-06-18 컴퓨터 어소시에이츠 싱크, 인코포레이티드 데이터베이스 질의를 자동으로 생성하는 시스템 및 방법
KR20070001781A (ko) * 2004-03-08 2007-01-04 마이크로소프트 코포레이션 데이터에 대한 함수 적용의 결과에 대한 구조화된 인덱스
KR20080068035A (ko) * 2008-04-28 2008-07-22 메디아라이프 뫼스틀 운트 라이프 코무니카치온스- 운트 인포마치온스테히놀로긴 오에게 관계형 데이터베이스 시스템을 제어하기 위한 방법
KR20090113499A (ko) * 2008-04-28 2009-11-02 권순용 데이터베이스 액세스 방법

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6996557B1 (en) * 2000-02-15 2006-02-07 International Business Machines Corporation Method of optimizing SQL queries where a predicate matches nullable operands
US7246108B2 (en) * 2004-07-27 2007-07-17 Oracle International Corporation Reusing optimized query blocks in query processing
US7814042B2 (en) * 2004-08-17 2010-10-12 Oracle International Corporation Selecting candidate queries
US7467128B2 (en) * 2006-02-15 2008-12-16 Microsoft Corporation Maintenance of materialized outer-join views
US8521723B1 (en) * 2012-07-18 2013-08-27 Oracle International Corporation Transforming correlated scalar subqueries

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030047889A (ko) * 2000-05-26 2003-06-18 컴퓨터 어소시에이츠 싱크, 인코포레이티드 데이터베이스 질의를 자동으로 생성하는 시스템 및 방법
KR20070001781A (ko) * 2004-03-08 2007-01-04 마이크로소프트 코포레이션 데이터에 대한 함수 적용의 결과에 대한 구조화된 인덱스
KR20080068035A (ko) * 2008-04-28 2008-07-22 메디아라이프 뫼스틀 운트 라이프 코무니카치온스- 운트 인포마치온스테히놀로긴 오에게 관계형 데이터베이스 시스템을 제어하기 위한 방법
KR20090113499A (ko) * 2008-04-28 2009-11-02 권순용 데이터베이스 액세스 방법

Also Published As

Publication number Publication date
US20140101130A1 (en) 2014-04-10
CN103729392A (zh) 2014-04-16
KR20140046257A (ko) 2014-04-18
CN103729392B (zh) 2017-03-01

Similar Documents

Publication Publication Date Title
KR101432700B1 (ko) 쿼리의 최적화를 위한 방법
US10102248B2 (en) Join type for optimizing database queries
Chen et al. The MemSQL Query Optimizer: A modern optimizer for real-time analytics in a distributed database
Thusoo et al. Hive-a petabyte scale data warehouse using hadoop
US6789071B1 (en) Method for efficient query execution using dynamic queries in database environments
Görlitz et al. Federated data management and query optimization for linked open data
US7343370B2 (en) Plan generation in database query optimizers through specification of plan patterns
US10726010B2 (en) Optimization technique of generalized disjunctive semi/anti join
US20080040317A1 (en) Decomposed query conditions
US8554760B2 (en) System and method for optimizing queries
Fegaras et al. XML Query Optimization in Map-Reduce.
US20160232207A1 (en) Hierarchy modeling and query
Bellamkonda et al. Enhanced subquery optimizations in oracle
US20060161525A1 (en) Method and system for supporting structured aggregation operations on semi-structured data
Habimana Query optimization techniques-tips for writing efficient and faster SQL queries
Li et al. SQL query optimization methods of relational database system
Zhang et al. Virtual denormalization via array index reference for main memory OLAP
Lee et al. Effective schema conversions between xml and relational models
Kolev et al. Benchmarking polystores: the CloudMdsQL experience
Marathe et al. Integrating the Orca Optimizer into MySQL.
Xirogiannopoulos et al. Memory-efficient group-by aggregates over multi-way joins
Leeka et al. RQ-RDF-3X: going beyond triplestores
Taniar et al. The use of Hints in SQL-Nested query optimization
Leela et al. Schema-conscious XML indexing
Saveliev Implementation of generalized relational algebraic operations with AsterixDB BDMS

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20170706

Year of fee payment: 4