KR100956921B1 - database access method - Google Patents

database access method Download PDF

Info

Publication number
KR100956921B1
KR100956921B1 KR1020080039248A KR20080039248A KR100956921B1 KR 100956921 B1 KR100956921 B1 KR 100956921B1 KR 1020080039248 A KR1020080039248 A KR 1020080039248A KR 20080039248 A KR20080039248 A KR 20080039248A KR 100956921 B1 KR100956921 B1 KR 100956921B1
Authority
KR
South Korea
Prior art keywords
index
access
data
determining whether
data connection
Prior art date
Application number
KR1020080039248A
Other languages
Korean (ko)
Other versions
KR20090113499A (en
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 KR1020080039248A priority Critical patent/KR100956921B1/en
Publication of KR20090113499A publication Critical patent/KR20090113499A/en
Application granted granted Critical
Publication of KR100956921B1 publication Critical patent/KR100956921B1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/40Information retrieval; Database structures therefor; File system structures therefor of multimedia data, e.g. slideshows comprising image and additional audio data
    • G06F16/41Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/40Information retrieval; Database structures therefor; File system structures therefor of multimedia data, e.g. slideshows comprising image and additional audio data
    • G06F16/43Querying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled

Landscapes

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

Abstract

본 발명은 데이터베이스 액세스 방법에 관한 것으로, 특히 디스크에 저장되어 있는 데이터베이스의 데이터에 대해 최적의 성능을 보장하고 효과적으로 액세스할 수 있는 데이터베이스 액세스 방법에 관한 것이다.The present invention relates to a database access method, and more particularly, to a database access method capable of ensuring optimal performance and effectively accessing data of a database stored on disk.

본 발명인 데이터베이스 액세스 방법을 이루는 구성수단은, 데이터베이스의 액세스 방법에 있어서, 입력되는 SQL을 통하여 데이터 연결 방법이 사용되고 있는지 판단하는 단계, 상기 판단 결과, 데이터 연결 방법이 사용된 경우에는 데이터 연결 방법이 일반조인, 서브쿼리, 스칼라 서브 쿼리, 순환전개 및 집합 연산자에 의한 것인지를 순차적으로 판단한 후 데이터 연결(조인)을 최적화한 후 실제 액세스되는 데이터의 처리 범위율, 테이블의 크기 및 인덱스 액세스 후 데이터를 저장하고 있는 테이블을 액세스하는 경우 발생하는 랜덤 액세스의 양을 판단하여 인덱스를 이용하거나 또는 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하고, 데이터 연결 방법이 사용되지 않은 경우에는 데이터 연결 최적화가 생략되고 실제 액세스되는 데이터의 처리 범위율이 인덱스 액세스 허용율을 초과하는지에 대한 판단, 테이블의 기준 크기보다 큰지 또는 작은지에 대한 판단 및 인덱스 액세스 후 데이터를 저장하고 있는 테이블을 액세스해야 하는 랜덤 액세스의 양을 판단하여 인덱스를 이용하거나 테이블 풀 스캔을 이용하여 최적의 데이터 액세스를 수행하는 단계를 포함하여 이루어진 것을 특징으로 한다.The constituent means of the database access method of the present invention include determining whether a data connection method is used through an input SQL in a database access method, and when the data connection method is used as a result of the determination, the data connection method is general. Determine sequentially by joins, subqueries, scalar subqueries, recursion, and set operators, then optimize data connections (joins), and then store the data coverage rate, size of the table, and index accesses When accessing a table that is being accessed, the data access is performed using an index or a table full scan by determining the amount of random access that occurs.If the data connection method is not used, data connection optimization is omitted and the actual access is performed. Processing data Use an index or table to determine whether the rate exceeds the index access allowance, whether it is larger or smaller than the base size of the table, and how much random access should access the table that stores the data after the index access. And performing optimal data access using a full scan.

데이터베이스, SQL, RDBMS Database, SQL, RDBMS

Description

데이터베이스 액세스 방법{database access method}Database access method

본 발명은 데이터베이스 액세스 방법에 관한 것으로, 특히 디스크에 저장되어 있는 데이터베이스의 데이터에 대해 최적의 성능을 보장하고 효과적으로 액세스할 수 있는 데이터베이스 액세스 방법에 관한 것이다.The present invention relates to a database access method, and more particularly, to a database access method capable of ensuring optimal performance and effectively accessing data of a database stored on disk.

현재 RDBMS(Relational Database Management Systems)를 사용하는 기업에서 관리하는 데이터는 기하 급수적으로 증가하고 있다. 이와 같이 기하 급수적으로 증가하는 데이터에서 원하는 데이터만을 효과적으로 액세스하지 않는다면 고객 서비스를 위한 최적의 성능을 보장할 수 없게 된다. 따라서, 현 시점에서 대용량의 데이터에서 원하는 데이터만을 추출할 수 있는 액세스 방법이 절실하게 필요한 실정이기 때문에, 디스크에 저장되어 있는 데이터에 대해 필요한 데이터를 엑세스하기 위한 최적의 경로를 찾아주는 방법이 요청되고 있다.Today, data managed by companies that use Relational Database Management Systems (RDBMS) is growing exponentially. Without exponentially accessing only the desired data from this exponentially growing data, optimal performance for customer service cannot be guaranteed. Therefore, since there is an urgent need for an access method capable of extracting only desired data from a large amount of data at this time, a method of finding an optimal path for accessing necessary data for data stored on a disk is required. have.

본 발명은 상기와 같은 종래 기술의 문제점을 해결하기 위하여 창안된 것으로, 대용량의 데이터로 구성되는 데이터베이스에서 원하는 데이터만을 추출하기 위하여 최적의 경로에 따라 데이터를 액세스할 수 있는 데이터베이스 액세스 방법을 제공하는 것을 그 목적으로 한다.The present invention has been made to solve the problems of the prior art, and to provide a database access method that can access data along an optimal path to extract only the desired data from a database consisting of a large amount of data For that purpose.

상기와 같은 과제를 해결하기 위하여 제안된 본 발명인 데이터베이스 액세스 방법을 이루는 구성수단은, 데이터베이스의 액세스 방법에 있어서, 입력되는 SQL을 통하여 데이터 연결 방법이 사용되고 있는지 판단하는 단계, 상기 판단 결과, 데이터 연결 방법이 사용된 경우에는 데이터 연결 방법이 From 절을 이용한 일반조인, Where 절을 이용하는 서브쿼리, Select 절을 이용하는 스칼라 서브 쿼리, 순환전개 및 집합 연산자에 의한 것인지를 순차적으로 판단한 후 데이터 연결을 최적화한 후 실제 액세스되는 데이터의 처리 범위율이 인덱스 액세스 허용율을 초과하는지, 테이블의 크기가 기준 크기를 초과하는지 또는 인덱스 액세스 후 데이터를 저장하고 있는 테이블을 액세스해야 하는 랜덤 액세스의 양을 판단하여 인덱스를 이용하거나 또는 인덱스를 이용하지 않고 테이블의 처음부터 끝까지 모든 블록을 액세스하는 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하고, 데이터 연결 방법이 사용되지 않은 경우에는 데이터 연결을 최적화하는 단계를 제외하고 실제 액세스되는 데 이터의 처리 범위율이 인덱스 액세스 허용율을 초과하는지, 테이블의 크기가 기준 크기를 초과하는지 또는 인덱스 액세스 후 데이터를 저장하고 있는 테이블을 액세스해야 하는 랜덤 액세스의 양을 판단하여 인덱스를 이용하거나 또는 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하는 단계를 포함하여 이루어진 것을 특징으로 한다.The constituent means of the database access method of the present invention proposed to solve the above problems is a step of determining whether a data connection method is used through an input SQL in a database access method, and as a result of the determination, the data connection method In this case, the data connection method is sequentially determined by the general join using the From clause, the subquery using the Where clause, the scalar subquery using the Select clause, and the recursion and set operator. The index can be used to determine whether the rate of processing of the data actually accessed exceeds the index access allowance, the size of the table exceeds the reference size, or the amount of random access that requires access to the table storing data after the index access. Or index this Data access is performed using a table pool scan that accesses all blocks from the beginning to the end of the table, instead of optimizing the data connection if the data connection method is not used. Use indexes or table pull scans to determine whether the rate exceeds the index access allowance, whether the size of the table exceeds the reference size, or the amount of random access that requires accessing the table storing the data after the index access. And performing a data access.

또한, 상기 데이터 연결 방법이 사용된 경우에는, 1차적으로 From 절을 이용하여 데이터를 연결하는 일반조인 방법에 의한 것인지를 판단하여, 일반조인 방법에 의한 데이터 연결의 경우에는 조인 검증으로 데이터 연결을 최적화한 후, 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여, 초과하지 않는다면 인덱스를 이용하고 초과한다면 테이블의 크기가 기준 크기보다 작거나 인덱스 액세스 후 테이블을 액세스하는 랜덤 액세스를 확인하여 랜덤 액세스가 발생하지 않을 수 있는 인덱스를 이용할 수 있다면 기준 크기보다 큰 테이블일지라도 인덱스를 이용하고 그렇지 않다면 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하고, 일반조인 방법에 의한 경우가 아닌 경우에는 데이터 연결 방법이 2차적으로 Where 절을 이용하는 데이터 연결 방식인 서브쿼리 방법에 의한 것인지를 판단한 후 조인 검증을 통해 서브 쿼리의 데이터 연결을 최적화한 후 인덱스의 이용유무를 결정하여 데이터 액세스를 수행하는 것을 특징으로 한다.In addition, when the data connection method is used, it is determined whether or not it is by a general join method that connects data by using a From clause. In the case of data connection by a general join method, data connection is performed by join verification. After optimizing, determine if the processing coverage rate exceeds the index access allowance, and if it does not exceed, use the index and if it exceeds, check the random access to access the table after the index is smaller than the reference size or after the index access. If you can use an index that may not occur, even if the table is larger than the reference size, use the index, otherwise use a table full scan to perform the data access. Data connection using the Where clause After determining whether the method is based on the subquery method, the data connection of the subquery is optimized through the join verification, and then data access is performed by determining the use of an index.

또한, 상기 데이터 연결 방법이 서브쿼리 방법에 의한 것인지를 판단한 결과, 서브쿼리 방법에 의한 경우에는 In addition, as a result of determining whether the data connection method is based on a subquery method, and when the subquery method is used,

존재 유무의 쿼리인지를 판단하여, 존재 유무의 쿼리가 아닌 경우에는 조인 검증 후, 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여 초과하지 않는다면 인덱스를 이용하고 초과한다면 테이블의 크기가 기준 크기보다 작거나 인덱스 액세스 후 테이블을 액세스하는 랜덤 액세스를 확인하여 랜덤 액세스가 발생하지 않을 수 있는 인덱스를 이용할 수 있는 기준 크기보다 큰 테이블일지라도 인덱스를 이용하고 그렇지 않다면 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하고, 서브 쿼리가 존재 유무의 쿼리인 경우에는 Exists절로 변경하여 조인 검증 후, 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여 초과하지 않는다면 인덱스를 이용하고 초과한다면 테이블의 크기가 기준 크기보다 작거나 인덱스 액세스 후 테이블을 액세스하는 랜덤 액세스를 확인하여 랜덤 액세스가 발생하지 않을 수 있는 인덱스를 이용할 수 있다면 기준 크기보다 큰 테이블일자라도 인덱스를 이용하고 그렇지 않다면 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하고,Determines whether the query exists or not, and if it does not exist, after join verification, it is determined whether the processing range rate exceeds the index access allowance. Check the random access to access the table after a small or indexed access so that even if the table is larger than the reference size that can use the index where random access may not occur, use the index, otherwise use a table full scan to perform data access. If the subquery is a query that exists or not, change to the Exists clause to verify the join, and then determine whether the processing range rate exceeds the index access rate. Table after index access If it is possible to check the random access to access and use an index where random access may not occur, use the index even if the table is larger than the reference size. Otherwise, perform a data access using a table full scan.

상기 서브쿼리 방법에 의한 경우가 아닌 경우에는 데이터 연결 방법이 3차적으로 Select 절을 이용하는 스칼라 서브쿼리 방법에 의한 것인지를 판단한 후 조인 검증을 통해 서브쿼리의 데이터 연결을 최적화한 후 인덱스의 이용유무를 결정하여 데이터 액세스를 수행하는 것을 특징으로 한다.If it is not the case of the subquery method, it is determined whether the data connection method is a scalar subquery method using the select clause in the third order, and then optimizes the data connection of the subquery through join verification and then checks whether or not the index is used. Determine and perform data access.

또한, 상기 데이터 연결 방법이 스칼라 서브쿼리 방법에 의한 것인지를 판단한 결과, 스칼라 서브쿼리 방법에 의한 경우에는,In addition, when it is determined whether the data connection method is based on the scalar subquery method, and when the scalar subquery method is used,

해당 SQL에서 From 절에 쿼리를 다시 사용하는 인라인 뷰의 사용 여부를 판단하여, 인라인 뷰를 사용하지 않는 경우에는 스칼라 서브쿼리의 조인 조건에 인덱 스가 존재하는지를 판단하고, 이 판단 결과, 인덱스가 존재하지 않는 경우에는 인덱스를 선정하여 데이터 액세스를 수행하고, 인덱스가 존재하는 경우에는 인덱스 검증에 따라 해당 인덱스 사용이 가능하면, 해당 인덱스를 그대로 사용하고, 해당 인덱스가 인덱스 검증에 의해 비효율이라면, 해당 테이블에 사용할 수 있는 다른 인덱스를 사용하거나 새로운 인덱스를 선정하여 데이터 액세스를 수행하고, In SQL, it is determined whether or not to use an inline view that reuses a query in the From clause. If the inline view is not used, it is determined whether an index exists in the join condition of the scalar subquery. If not, perform the data access by selecting an index, and if the index exists, use the index if it can be used according to the index verification, and if the index is inefficient by index verification, Access data by using another available index or by selecting a new index,

상기 해당 SQL에서 인라인 뷰를 사용한 경우에는 인라인 뷰 자체에서 액세스하는 총 건수가 결과 건수를 초과하는지를 판단하여, 초과한 경우에는 주 쿼리로 스칼라 서브쿼리를 이동한 후 상기 스칼라 서브쿼리의 조인 조건에 인덱스가 존재하는지를 판단하고, 상기 인라인 뷰 자체에서 액세스하는 총 건수가 결과 건수 이하인 경우에는 바로 상기 스칼라 서브쿼리의 조인 조건에 인덱스가 존재하는지를 판단하며 인덱스가 존재한다면 인덱스를 이용하여 데이터를 액세스하고 인덱스가 존재하지 않다면 새로운 인덱스를 선정하며 스칼라 서브쿼리와 조인하는 주 쿼리의 테이블에 대해 인덱스 사용 유무를 검증하며,When the inline view is used in the corresponding SQL, it is determined whether the total number of accesses in the inline view itself exceeds the number of results. If the number is exceeded, the index is moved to the join condition of the scalar subquery after moving the scalar subquery to the main query. Is determined, and if the total number of accesses in the inline view itself is less than or equal to the number of results, it is immediately determined whether an index exists in the join condition of the scalar subquery, and if the index exists, the data is accessed using the index and the index is If it does not exist, it selects a new index and verifies the use of the index on the table of the main query that joins the scalar subquery.

상기 데이터 연결 방법이 스칼라 서브쿼리 방법에 의한 것인지를 판단한 결과, 스칼라 서브쿼리 방법에 의한 경우가 아닌 경우에는 데이터 연결 방법이 4차적으로 순환 전개 방법에 의한 것인지를 판단한 후 순환 전개에 최적화된 인덱스를 이용하여 데이터 액세스를 수행하는 것을 특징으로 한다.As a result of determining whether the data connection method is based on a scalar subquery method, if the data connection method is not based on a scalar subquery method, it is determined whether the data connection method is based on a fourth-order circular deployment method, and then an index optimized for circular deployment is obtained. To perform data access.

또한, 상기 데이터 연결 방법이 Connect By .... Start With 절을 사용하는 순환 전개 방법에 의한 것인지를 판단한 결과, 순환 전개 방법에 의한 경우에는, In addition, when it is determined that the data connection method is based on the circular expansion method using the Connect By .... Start With clause, and when the circular connection method is used,

해당 SQL이 Connect By 절의 Prior 절 반대편에 설정되어 있는 컬럼으로 생 성된 인덱스를 사용하고 있는지를 판단하여, 인덱스를 사용하고 있지 않은 경우에는 Connect By 절의 Prior 절 반대편에 존재하는 조건에 인덱스 선정 및 Start With 절에 사용된 조건에 인덱스를 선정하여 데이터 액세스를 수행하고, Connect By 절의 Prior 절 반대편에 존재하는 조건으로 구성된 인덱스 및 Start With 절에 사용된 조건으로 구성된 인덱스를 사용하고 있는 경우에는 인덱스 검증에 따라 해당 인덱스들의 사용이 가능하면, 해당 인덱스들을 그대로 사용하고, 해당 인덱스들의 사용이 인덱스 검증에 의해 비효율이라면, 해당 테이블에 사용할 수 있는 다른 인덱스를 사용하거나 처리 범위율과 랜덤 액세스를 고려한 새로운 최적의 인덱스를 선정하여 데이터 액세스를 수행하며,Determines whether the SQL is using an index created with a column that is set on the other side of the Prior clause of the Connect By clause. If the index is not used, selects the index and starts with the condition on the other side of the Prior clause of the Connect By clause. When accessing data by selecting an index in a condition used in the clause, and using an index composed of a condition existing on the opposite side of the Prior clause of the Connect By clause and an index composed of a condition used in the Start With clause, If the indexes are available, use the indexes as they are, and if the indexes are inefficient by index validation, use another index available for the table, or consider a new optimal index that takes into account throughput and random access. Select and perform data access,

상기 데이터 연결 방법이 순환 전개 방법에 의한 경우가 아닌 경우에는 데이터 연결 방법이 5차적으로 2개 이상의 SQL을 결합하여 데이터를 연결하는 집합 연산자를 이용한 방법에 의한 것인지를 판단한 후 SQL 변경 등을 고려한 후 인덱스 이용 여부를 판단하여 데이터 액세스를 수행하는 것을 특징으로 한다.If the data connection method is not the case of the circular deployment method, after determining whether the data connection method is based on a method using a set operator that combines data by combining two or more SQLs in fifth order, and then considers the SQL change. It is characterized by performing data access by determining whether the index is used.

또한, 상기 데이터 연결 방법이 집합 연산자 방법에 의한 것인지를 판단한 결과, UNION 집합 연산자 방법에 의한 경우에는,In addition, as a result of determining whether the data connection method is based on the set operator method, when the UNION set operator method is used,

데이터에 대한 정렬을 발생시키지 않기 때문에 데이터 액세스를 최적화할 수 있는 Union All 집합 연산자로 변경 가능한지를 판단하여, 가능한 경우에는 Union All 집합 연산자로 SQL을 변경한 후 Union All로 연결된 각각의 SQL이 동일 테이블을 액세스하고 있는지를 판단하고, 이 판단 결과 동일 테이블을 액세스하고 있는 경우에는 테이블을 한 번만 액세스하도록 업무를 고려하여 SQL을 변경한 후 처리 범위율이 인덱스 액세스 허용율을 초과하지 않는다면 인덱스를 이용하고 초과한다면 테이블의 크기가 기준 크기보다 작거나 인덱스 액세스 후 테이블을 액세스하는 랜덤 액세스를 확인하여 랜덤 액세스가 발생하지 않을 수 있는 인덱스를 이용할 수 있다면 기준 크기보다 큰 테이블일지라도 인덱스를 이용하고 그렇지 않은 모든 경우에는 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하고, 상기 절차는 집합 연산자에 존재하는 테이블의 개수만큼 반복 수행하며, 여기서 Union All과 Union의 차이는 두 집합의 교집합을 한번 더 액세스하여 결과로 추출하는가의 차이이며 업무적으로 두 집합의 교집합이 한번만 결과로 추출해도 되고 두번 추출해도 상관이 없다면 언제나 Union을 Union All로 변경할 수 있으며, 동일 테이블을 두 번 액세스하여 결과를 추출하는 것은 업무를 고려하여 한번 액세스한 테이블의 데이터를 메모리에서 가공하여 복제하는 방식을 사용하여 한번만 액세스하게 변경하며,Because it does not cause sorting on the data, it is determined whether it can be changed by the Union All set operator, which can optimize data access. If possible, change the SQL with the Union All set operator, and then each SQL linked by Union All is the same table. If you are accessing the same table as a result of the judgment, change the SQL to consider accessing the table only once, and then use the index if the processing range rate does not exceed the index access rate. If the size of the table is less than the base size, or if random access is used to access the table after the index is accessed, then an index may be used where random access may not occur. There is a table full scan Data access by using the above procedure, and the procedure is repeated as many times as there are tables in the set operator, where the difference between Union All and Union is the difference between accessing the intersection of the two sets and extracting the result as a result. If the intersection of two sets can be extracted as a result only once or if it does not matter twice, it can always change the union to Union All, and extracting the result by accessing the same table twice can take the data of the table accessed once in consideration of business. Change it to access only once, using the process of copying from memory.

상기 Union 집합 연산자를 Union All 집합 연산자로 변경 가능한지를 판단하여, 불가능한 경우에는 Union All 연산자로 SQL을 변경하지 않고, 상기 동일 테이블을 액세스하고 있는지를 판단하는 절차를 수행하고,Determining whether the union set operator can be changed to a union all set operator, and if not, perform a procedure of determining whether the same table is being accessed without changing the SQL by the union all operator,

상기 데이터 연결 방법이 집합 연산자 방법에 의한 것인지를 판단한 결과, 집합 연산자 방법에 의하지 않은 경우에는, 상기 Union All로 연결된 각각의 SQL이 동일 테이블을 액세스하고 있는지를 판단하는 절차를 수행하는 것을 특징으로 한다.As a result of determining whether the data connection method is based on the set operator method, if it is not based on the set operator method, a procedure of determining whether each SQL connected by the Union All is accessing the same table is performed. .

한편, 상기 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여 인덱스를 이용하거나 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하는 단계는,In the meantime, determining whether the processing range rate exceeds the index access allowance rate and performing data access using an index or a table pull scan may include:

상기 처리 범위율이 인덱스 액세스 허용율을 초과하는 경우에는 테이블의 크기가 기준 크기를 초과하는지를 판단하여, 초과하는 경우에는 인덱스를 이용하거나 테이블 풀스캔을 이용하여 데이터 액세스를 수행하고, 테이블의 크기가 기준 크기 이하인 경우에는 인덱스를 이용하여 데이터 액세스를 수행하고, 테이블의 기준 크기는 (데이터 블록 크기)*10000*(다중 블록 I/O 개수)/2이며 여기서 데이터 블록 크기는 데이터를 저장하는 디스크 블록의 크기이며 10000은 인덱스를 이용하여 데이터를 액세스하는 경우 인덱스를 이용하는 온라인 SQL은 10000 미만의 데이터 블록을 액세스해야 온라인으로 자격을 부여받기 때문이고 (다중 블록 I/O 개수)/2는 테이블 풀 스캔에 대한 보정 값이며 If the processing coverage ratio exceeds the index access allowance rate, it is determined whether the size of the table exceeds the reference size. If the processing coverage ratio is exceeded, data access is performed using an index or a table full scan, and the size of the table is increased. If the size is less than the reference size, data access is performed using an index, and the reference size of the table is (data block size) * 10000 * (multiblock I / O count) / 2, where the data block size is a disk block that stores data. 10000 is the size of the table, and when accessing data using indexes, online SQL using indexes requires access to data blocks less than 10000 to qualify online (multiple block I / O counts) / 2 The correction value for

상기 처리 범위율이 인덱스 액세스 허용율 이하인 경우에는 인덱스를 이용하여 데이터 액세스를 수행하는 것을 특징으로 한다.When the processing range ratio is less than or equal to the index access permission rate, data access is performed using an index.

또한, 상기 테이블의 크기가 기준 크기를 초과하여 인덱스를 이용하거나 테이블 풀스캔을 이용하여 데이터 액세스를 수행하는 과정은,In addition, the process of performing data access using an index or a table full scan when the size of the table exceeds the reference size,

추출 건수와 처리 범위가 동일한지를 판단하여, 동일한 경우이며 테이블에 존재하는 인덱스 중에 인덱스 액세스 후 테이블을 액세스하는 랜덤 액세스가 발생하지 않는 인덱스 스캔만으로 결과 추출이 가능한지를 판단하고, 이 판단 결과 가능한 경우에는 인덱스 검증에 따라 사용 가능한 인덱스이면 해당 인덱스를 이용하여 데이터 액세스를 수행하고, 상기 인덱스 스캔만으로 결과 추출이 가능한지를 판 단한 결과, 불가능한 경우에는 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하며,It is determined whether the number of extraction and the processing range are the same, and it is the same case, and it is determined whether the result extraction is possible only by an index scan in which the random access to the table is not performed after the index access among the indexes existing in the table. If the index is available according to the index verification, the data is accessed using the corresponding index, and if it is impossible to extract the result using only the index scan, if it is impossible, the data access is performed using the table full scan.

상기 SQL의 추출 건수와 처리 범위가 동일한지를 판단하여, 동일하지 않은 경우에는 추출 건수가 인덱스 액세스 허용율을 초과하는지를 판단하고, 이 판단 결과 초과하는 경우에는 상기 인덱스 액세스 후 테이블을 액세스하는 랜덤 액세스가 발생하지 않는 인덱스 스캔만으로 결과 추출이 가능한지를 판단하는 절차를 수행하고, 상기 추출 건수가 인덱스 액세스 허용율 이하인 경우에는 추출되는 데이터에 기준 데이터가 존재하는지를 판단하고, 이 판단 결과 기준 데이터가 존재하는 경우에는 상기 기준 데이터를 주 쿼리로 작성하여 결과로 추출하고 Max, Min, Sum 등의 그룹 함수에 의해 감소하는 데이터를 스칼라 서브쿼리로 변경한 후 인덱스를 선정하여 데이터 액세스를 수행하고, 상기 기준 데이터가 존재하지 않은 경우에는 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하는 것을 특징으로 한다.It is determined whether the number of extractions and the processing range of the SQL are the same, and when it is not the same, it is determined whether the number of extractions exceeds the index access allowance rate. Determining whether the result can be extracted only by the index scan that does not occur. If the number of extracts is less than or equal to the index access rate, it is determined whether the reference data exists in the extracted data. The reference data is written as a main query, extracted as a result, the data reduced by a group function such as Max, Min, Sum, etc. is changed to a scalar subquery, an index is selected, and data access is performed. If it does not exist, use table full scan. It characterized by performing the data access.

또한, 상기 테이블의 크기가 기준 크기 이하인 경우 또는 상기 처리 범위율이 인덱스 액세스 허용율 이하인 경우 수행되는 인덱스를 이용한 데이터 액세스 과정은,In addition, the data access process using an index performed when the size of the table is less than or equal to the reference size or the processing range rate is less than or equal to the index access allowance rate,

해당 SQL이 인덱스를 이용하는지를 판단하여, 인덱스를 이용하고 있는 경우에는 인덱스 검증을 통해 상기 해당 인덱스가 사용 가능하면 해당 인덱스를 이용하여 데이터 액세스를 수행하고, 해당 인덱스가 사용 불가능하면 해당 테이블에 추가적인 인덱스가 존재하는지를 판단하고, 이 판단 결과에 따라 해당 인덱스를 사용하거나 다른 인덱스를 선정하여 데이터 액세스를 수행하고,If the SQL is determined to use an index, and if the index is used, the data is accessed using the index if the index is available through index verification. If the index is not available, an additional index is added to the table. Determines whether or not is present, and uses the corresponding index or selects another index to perform data access according to the determination result.

상기 해당 SQL이 인덱스를 이용하는지를 판단하여, 인덱스를 이용하고 있지 않은 경우에는 처리 범위를 감소시킬 수 있는 다른 인덱스가 존재하는지를 판단하고, 이 판단 결과 다른 인덱스가 존재하는 경우에는 인덱스 검증을 통하여 사용 가능한 인덱스이면 해당 인덱스를 사용하여 데이터 액세스를 수행하고, 사용 불가능하면 상기 처리 범위를 감소시킬 수 있는 다른 인덱스가 존재하는지를 추가로 판단하는 절차를 수행하며,It is determined whether the corresponding SQL uses an index, and if there is no index, it is determined whether there is another index that can reduce the processing range. If the index is used to perform data access using the index, and if not available, further determines whether there is another index that can reduce the processing range,

상기 처리 범위를 감소시킬 수 있는 다른 인덱스가 존재하는지를 판단한 결과, 다른 인덱스가 존재하지 않은 경우에는 인덱스를 선정하여 데이터 액세스를 수행하는 것을 특징으로 한다.As a result of determining whether there is another index that can reduce the processing range, if no other index exists, the index is selected and data access is performed.

또한, 상기 해당 인덱스가 사용 불가능하면 해당 테이블에 추가적인 인덱스가 존재하는지를 판단하고, 이 판단 결과에 따라 해당 인덱스를 사용하거나 다른 인덱스를 선정하여 데이터 액세스를 수행하는 과정은,In addition, if the corresponding index is unavailable, it is determined whether an additional index exists in the corresponding table, and according to the determination result, the process of performing data access by using the corresponding index or selecting another index,

상기 해당 테이블에 추가적인 인덱스가 존재하지 않은 경우에는 인덱스를 선정하여 데이터 액세스를 수행하고,If no additional index exists in the corresponding table, the index is selected to perform data access,

상기 해당 테이블에 추가적인 인덱스가 존재한 경우에는, 처리 범위를 감소시킬 수 있는 인덱스가 존재하는지를 판단하고, 이 판단 결과 존재한 경우에는 인덱스 검증을 통해 사용 가능한 인덱스이면 이 인덱스를 사용하여 데이터 액세스를 수행하고, 사용 불가능한 인덱스이면 상기 해당 테이블에 추가적인 인덱스가 존재하는지를 판단하는 절차를 반복 수행하고,If there is an additional index on the corresponding table, it is determined whether there is an index that can reduce the processing range. If the index exists, if the index is available through index verification, the data is accessed using this index. If the index is unavailable, the procedure for determining whether an additional index exists in the corresponding table is repeated.

상기 처리 범위를 감소시킬 수 있는 인덱스가 존재하는지를 판단한 결과, 존 재하지 않은 경우에는 스킵 스캔(Skip Scan)이 적용 가능한지를 판단하고, 이 판단 결과 가능하면 스킵 스캔(Skip Scan)을 고려하여 SQL을 변경한 후, 인덱스 검증을 통해 사용 가능한 인덱스이면 이 인덱스를 사용하여 데이터 액세스를 수행하고, 사용 불가능한 인덱스이면 처리 범위를 감소시키는 인덱스도 존재하지 않으며, 더 이상 스킵 스캔(Skip Scan)을 이용할 수 없으므로 인덱스를 새로 선정하여 데이터 액세스를 수행하는 것을 특징으로 한다. As a result of determining whether there is an index that can reduce the processing range, if it does not exist, it is determined whether a skip scan is applicable, and as a result of this determination, SQL is considered in consideration of a skip scan. After the change, if the index is available through index verification, the data access is performed using this index. If the index is unavailable, there is no index that reduces the processing scope, and the skip scan is no longer available. A new index is selected to perform data access.

여기서 스킵 스캔(Skip Scan)의 적용 가능 여부는 인덱스의 컬럼 중 Where 절에 존재하지 않는 인덱스의 앞쪽 컬럼이 분포도가 나쁜 경우 적용이 가능하며, 분포도가 나쁘다는 의미는 해당 컬러의 값의 카디날리티(Cardinality)가 낮다는 의미이며 예를 들어 성별 컬럼은 여성 또는 남성이 되므로 카디날리티가 낮은 컬럼이며, 인덱스를 성별 컬럼, 카드번호 컬럼, 거래일자 컬럼 순으로 생성했으며 Where 절에는 카드번호 조건과 거래일자 조건이 설정된다면 해당 SQL은 인덱스를 이용할 수 없는 것이 기본이며, 하지만 성별 컬럼이 여성 또는 남성만 되므로 Where 절에 성별= '남성' OR 성별 = '여성'을 설정하게 되면 성별 컬럼이 Where절에 설정되므로 해당 인덱스를 이용할 수 있게 되며 이를 이용하는 것을 스킵 스캔(Skip Scan)이라고 하며 이처럼 인덱스 컬럼의 앞 컬럼이 Where 절에 존재하지 않고 해당 컬럼의 카디날리티(Cardinality)가 낮을 경우 스킵 스캔(Skip Scan)을 사용할 수 있다. The skip scan can be applied when the front column of the index that does not exist in the Where clause among the columns of the index is poorly distributed, and the bad distribution means that the cardinality of the corresponding color value ( Cardinality) is low. For example, the gender column is female or male, so the cardinality is low. The index is created in the following order: gender column, card number column, and transaction date column. If the condition is set, the SQL defaults to not using indexes, but since the gender column is only female or male, if you set gender = 'male' OR gender = 'female' in the Where clause, the gender column is set in the Where clause. The index can be used, which is called a skip scan. Does not exist in the Where clause if the lower Cardinality (Cardinality) of the column can be used to skip scan (Skip Scan).

여기서 인덱스의 선정 기준은 두 가지 우선 순위에 의해 수행되며 그 우선 순위는 처리 범위를 최소화시킬 수 있는 인덱스 컬럼의 순서 선정과 확인 취사 랜덤 액세스를 최소화시키는 인덱스 컬럼 선정이며, 처리 범위를 최소화 시킬 수 있 는 여러 컬럼으로 인덱스를 생성하는 결합 인덱스 컬럼 순서 선정은 점 조건과 선분 조건의 조합에 의해 이루어진다.Here, the index selection criteria are performed by two priorities, which are the order selection of the index column that can minimize the processing range and the selection of the index column that minimizes the randomization of the check and the random access, and the processing range can be minimized. In order to create an index with multiple columns, the indexing order of the combined index is achieved by a combination of point and line conditions.

상기 점 조건은 = 과 IN 연산자만이 존재하며 선분 조건은 점 조건을 제외한 다른 연산자를 의미하며, 이와 같은 경우 결합 인덱스는 점 조건의 컬럼과 선분 조건의 컬럼 순으로 인덱스를 선정하거나 점 조건의 컬럼과 점 조건의 컬럼 순서로 결합 인덱스를 생성한다면 각각의 인덱스는 두 컬럼에 의해 처리범위가 감소하므로 처리 범위를 최소화시키게 되지만 선분 조건의 컬럼과 점 조건의 컬럼 순으로 결합 인덱스를 생성한다면 이는 앞의 선분 조건에 의해서만 처리 범위가 감소하게 되므로 처리 범위를 최소화시키는 최적의 인덱스 선정은 못되며, 예를 들어 Where 절이 카드번호= 'AAA' AND 거래일자 LIKE '2000801%'라면 카드번호 컬럼은 점 조건이며 거래일자 컬럼은 선분 조건이 되므로 결합 인덱스는 카드번호 컬럼이 인덱스의 앞에 그리고 거래일자 컬럼은 뒤에 위치시켜 결합 인덱스를 생성해야만 처리 범위를 최소화시킬 수 있으며, 그렇기 때문에 처리 범위를 최소화시키기 위한 인덱스 선정은 점 조건+......+점 조건+선분 조건+.....+선분 조건의 형태로 구성해야 하며, 확인 취사 랜덤 액세스를 최소화시키는 인덱스 컬럼의 선정은 예를 들어, Where 절이 카드번호= 'AAA' AND 거래일자 LIKE '2000801%'이며 해당 테이블에 카드번호 컬럼과 가맹점 컬럼으로 인덱스가 생성되어 있다면 해당 인덱스를 이용하는 순간 카드번호 컬럼은 점 조건이므로 처리 범위를 감소시킬 수 있지만 거래일자 컬럼은 인덱스에 존재하지 않게 되어 테이블을 액세스해서 값을 확인해야 하고, 이를 확인 랜덤 액세스라 하며, 확인 취사 랜덤 액세스는 확인 랜덤 액세스 후 조건을 만족하 지 못해 버려지는 데이터를 의미하며 이는 데이터 액세스에 부하를 증가시키게 되며, 인덱스를 카드번호 컬럼과 가맹점 컬럼 그리고 거래일자 컬럼의 순으로 선정한다면 카드번호 컬럼은 처리 범위를 감소시키는 컬럼으로 동일하게 수행되며 거래일자 컬럼은 앞에 가맹점 컬럼이 인덱스에 존재하며 가맹점 컬럼은 Where 절에 존재하지 않으므로 거래일자 컬럼은 처리 범위를 감소시키지 못하게 된다. The point condition means that only the = and IN operators exist, and the segment condition means other operators except the point condition. In this case, the join index selects an index in the order of the column of the point condition and the column of the line condition, or the column of the point condition. If you create a join index in the order of columns with an overpoint condition, each index is reduced by two columns, so the processing range is minimized. However, if you create a join index in the order of a column of a line condition and a column of a point condition, Because the processing range is reduced only by the line segment condition, it is not possible to select the optimal index to minimize the processing range. For example, if the Where clause is the card number = 'AAA' AND transaction date LIKE '2000801%', the card number column is a dot condition. Since the transaction date column becomes a segment condition, the join index requires that the card number column precedes the index and the transaction date column You can minimize the scope of processing only by creating a join index located later, so selecting an index to minimize the scope of processing is point condition + ...... + point condition + segment condition + ..... + segment The selection of an index column that minimizes the categorization random access is, for example, the Where clause is the card number = 'AAA' AND transaction date LIKE '2000801%' and the card number column and the merchant column in the table. If the index is created, the card number column is a point condition at the moment of using the index, so the processing range can be reduced, but the transaction date column does not exist in the index, so the table must be accessed to check the value. The random check random access means data that is discarded because the condition is not satisfied after the random check random access. If the index is selected in the order of the card number column, the merchant column, and the transaction date column, the card number column is performed in the same way as the column that reduces the processing range, and the transaction date column is preceded by the merchant column in the index. Transaction column does not reduce the scope of processing because the merchant column does not exist in the Where clause.

하지만, 거래일자 컬럼이 인덱스에 존재하기 때문에 인덱스에서 거래일자 컬럼의 값을 확인할 수 있게 되며 따라서, 거래일자 컬럼의 값을 확인하기 위해 테이블을 액세스할 필요는 없게 되어 확인 랜덤 액세스는 감소하게 되며, 따라서 확인 취사 랜덤 액세스도 감소하게 되며 확인 취사 랜덤 액세스의 건수는 (랜덤 액세스 건수)*(인덱스 액세스 허용율)*(CPU개수/2)/100의 값보다 작아야 하며, CPU개수/2는 하드웨어의 성능을 고려한 보정 값이며, 결합 인덱스를 생성하는 경우에는 위와 같은 인덱스 선정 기준을 가지고 인덱스를 선정해야 한다. However, since the transaction date column exists in the index, it is possible to check the value of the transaction date column in the index. Therefore, it is not necessary to access the table to verify the value of the transaction date column. Therefore, the number of check self-random accesses is also reduced, and the number of check self-random accesses must be smaller than the value of (Random Access) * (Index Access Permit Rate) * (Number of CPU / 2) / 100. This is a correction value considering performance, and when creating a combined index, the index should be selected based on the above index selection criteria.

여기서 인덱스 검증은 기존에 사용하는 인덱스가 존재하는 경우를 의미하며 기존에 인덱스가 존재하기 때문에 해당 인덱스가 처리 범위를 최대한 감소시키며 랜덤 액세스까지 최소화 시키는지를 확인하면 되며 처리 범위는 해당 인덱스를 구성하는 컬럼에 사용된 연산자가 점 조건이냐 선분 조건이냐에 달려 있으며 이 경우 점 조건이 인덱스의 앞으로 선분 조건이 인덱스의 뒤에 위치되어야 선분 조건의 컬럼과 점 조건의 컬럼 순서로 구성되지 않기 때문에 인덱스를 구성하는 전체 컬럼에서 첫 번째 나오는 선분 조건까지 처리 범위를 감소시킬 수 있게 되어 처리 범위를 최소화시키는 결합 인덱스가 되며 이와 같이 처리 범위를 검증하여 처리 범위율이 인덱스 액세스 허용율 이하가 되어야 하며 그 다음은 비 처리 조건의 검증이며 비 처리 조건은 조건 절에는 해당 컬럼이 존재하지만 인덱스에서 선분 조건의 뒤에 존재하여 해당 컬럼이 처리 범위를 감소시키지 못하는 경우를 의미하며 비 처리 조건에 의해 인덱스에서 액세스하고 버려지는 데이터가 50% 이상이라면 해당 컬럼은 비처리 조건이 아닌 인덱스를 재선정하여 처리 범위를 감소시키는 조건으로 역할을 수행해야 하며 마지막으로 확인 취사 랜덤 액세스를 확인하며 확인 취사 랜덤 액세스는 조건 절에 있는 컬럼이 인덱스에 없는 경우 해당 컬럼의 값을 확인하기 위해 테이블을 액세스하게 되며 확인 취사 랜덤 액세스는 액세스한 데이터 중 조건을 만족하지 않게 되면 버려지는 랜덤 액세스이며 (랜덤 액세스 건수)*(인덱스 허용율)*(CPU개수/2)/100보다 확인 취사 랜덤 액세스의 건수가 적어야만 인덱스의 효율을 보장할 수 있으며 (CPU개수/2)는 하드웨어의 성능을 고려한 보정 값이며 상기와 같은 인덱스 검증의 세가지 항목에 어긋나는 인덱스는 재선정을 수행해야 하는 특징을 가진다.In this case, the index verification refers to the case where the existing index exists, and since the existing index exists, it is necessary to check whether the index reduces the processing range as much as possible and minimizes random access.The processing range is the column constituting the index. Depends on whether the operator used for is a point condition or a segment condition, in which case the point condition is not composed of the column of the segment condition and the column order of the point condition before the index condition must be placed after the index. It is possible to reduce the processing range up to the first line condition in the column, resulting in a join index that minimizes the processing range. Thus, the processing range must be verified so that the processing range rate is less than or equal to the index access allowance. Is a verification of the non-processing condition In the dry clause, the column exists but after the segment condition in the index, the column is not able to reduce the processing range. If the data is accessed and discarded in the index by more than 50%, the column is non- It must serve as a condition that reduces the scope of processing by reselecting the index, not the processing condition. Finally, it checks for the check random access and the check for random access checks the value of the column if the column in the condition clause is not in the index. The random access is a random access that is discarded when the condition of the accessed data is not satisfied. The random access is checked more than (number of random accesses) * (index allowance) * (number of CPUs / 2) / 100. Only when the number of random accesses is small, the efficiency of the index can be guaranteed. The correction value considering the performance of the hardware and the index that is inconsistent with the three items of the above-described index verification have the feature of performing reselection.

상기와 같은 과제 및 해결 수단을 가지는 본 발명인 데이터베이스 액세스 방법에 의하면, 대용량의 데이터로 구성되는 데이터베이스에서 원하는 데이터만을 추출하기 위하여 최적의 경로에 따라 데이터를 액세스하기 때문에 빠른 데이터 추출이 가능하고, 결과적으로 데이터베이스의 원활한 서비스를 통해 고객 만족을 달성할 수 있는 장점이 있다.According to the database access method of the present invention having the above-described problems and solving means, since data is accessed along an optimal path in order to extract only the desired data from a database consisting of a large amount of data, fast data extraction is possible, and consequently The smooth service of the database has the advantage of achieving customer satisfaction.

이하, 첨부된 도면을 참조하여 상기와 같은 과제, 해결 수단 및 효과를 가지는 본 발명인 데이터베이스 액세스 방법에 관한 바람직한 실시예를 상세하게 설명한다.Hereinafter, with reference to the accompanying drawings will be described in detail a preferred embodiment of the database access method of the present invention having the above problems, solving means and effects.

도 1은 본 발명의 실시예에 따른 데이터베이스 액세스 방법에 관한 절차도이고, 도 2 내지 도 4는 SQL(Structured Query Language)이 데이터 연결 방법을 사용하지 않는 경우에 데이터 액세스를 수행하는 절차도이고, 도 5 및 도 6은 SQL이 데이터 연결 방법을 사용한 경우에 데이터 액세스를 수행하는 절차도이다.1 is a flowchart illustrating a method for accessing a database according to an embodiment of the present invention, and FIGS. 2 to 4 are procedure diagrams for performing data access when a structured query language (SQL) does not use a data connection method. 5 and 6 are procedural diagrams for performing data access when SQL uses a data connection method.

도 1에 도시된 바와 같이, 본 발명에 따른 데이터베이스 액세스 방법은 먼저, SQL을 입력받은 후(S100), 입력받은 SQL을 통하여 데이터 연결 방법이 사용되고 있는지를 판단한다(S200).As shown in FIG. 1, in the database access method according to the present invention, first, after receiving SQL (S100), it is determined whether a data connection method is used through the received SQL (S200).

상기 판단 결과, 데이터 연결 방법이 사용된 경우에는 데이터 연결 방법이 From 절을 이용하여 데이터를 연결하는 일반조인, Where 절에서 데이터를 연결하는 서브쿼리, Select 절에서 데이터를 연결하는 스칼라 서브 쿼리, Connect By ... Start With 구문으로 데이터를 연결하는 순환전개 및 집합 함수에 의한 데이터 연결인지를 순차적으로 판단하여 조인 검증을 수행한 후 해당 SQL의 처리 범위율이 인덱스 액세스 허용율을 초과하지 않는다면 인덱스를 이용하고 초과한다면 테이블의 크기가 기준 크기보다 작거나 인덱스를 액세스한 후 테이블을 액세스하는 과정에 발생하는 랜덤 액세스가 발생하지 않는다면 기준 크기보다 큰 테이블일지라도 인덱스를 이용하고 랜덤 액세스가 발생한다면 테이블의 처음부터 마지막 블록까지 액세스하는 테이블 풀 스캔을 이용하여 데이터 액세스를 수행한다(S300).As a result of the determination, when a data connection method is used, the data connection method is a general join that connects data using a From clause, a subquery that connects data in a Where clause, a scalar subquery that connects data in a Select clause, and Connect The join validation is performed by sequentially determining whether the data connection is performed by the circular development and the set function that connects the data with the By ... Start With statement. If the size of the table is smaller than the reference size or if random access occurs while accessing the table after accessing the index, if the table is larger than the reference size, the index is used and the random access occurs. Table full scan accessing to the last block To perform data access (S300).

반면, 판단 결과, 데이터 연결 방법이 사용되지 않은 경우에는 데이터 연결에 대한 조인 검증을 생략하고 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여 초과하지 않는 경우에는 인덱스를 이용하거나 초과하는 경우에는 테이블의 크기가 기준 크기보다 작거나 인덱스를 엑세한 후 테이블을 액세스하는 랜덤 액세스가 발생하지 않는다면(인덱스 스캔만으로 결과 추출) 기준 크기보다 큰 테이블일지라도 인덱스를 이용하고 랜덤 액세스가 발생한다면 테이블 풀 스캔을 이용하여 데이터 액세스를 수행한다(S400). On the other hand, as a result of the determination, if the data connection method is not used, the join verification for the data connection is skipped, and it is determined whether the processing range rate exceeds the index access allowance rate. If the size of the table is smaller than the reference size or random access to the table after accessing the index does not occur (extract results by index scan only), use a table full scan if the table is larger than the reference size and if random access occurs. To perform data access (S400).

여기서, 상기 처리 범위율은 테이블 전체 로(Row) 중 해당 조건을 만족하는 로(Row) 수의 비율을 의미하는 것이고, 상기 인덱스 액세스 허용율은 테이블 풀 스캔시 사용하는 한번의 I/O에 여러 데이터 블록을 액세스하는 다중 블록 I/O를 고려하여 이를 백분율로 환산하여 랜덤 액세스에 의한 부하 가중치(0.5)를 곱하여 산출하며 그 값은 대략 3% 정도이다. 따라서, 상기 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여 초과하지 않다면 인덱스를 이용하고 초과하는 경우에 테이블의 크기가 기준 크기보다 작거나 랜덤 액세스가 발생하지 않으며 기준 크기보다 큰 테이블 또한 인덱스를 이용하며 랜덤 액세스가 발생한다면 테이블 풀 스캔을 이용하여 데이터 액세스를 수행한다.Herein, the processing range ratio refers to a ratio of the number of rows satisfying a corresponding condition among the rows of the entire table, and the index access allowance ratio is set to one I / O used during a table pool scan. Considering the multi-block I / O accessing the data block, it is calculated by multiplying by the percentage by multiplying the load weight (0.5) by the random access, the value is about 3%. Therefore, if the processing coverage ratio exceeds the index access allowance, it is determined that the size of the table is smaller than the reference size or random access does not occur when the index is exceeded. If a random access occurs, data access is performed using a table full scan.

여기서 랜덤 액세스는 인덱스 액세스후 필요에 의해 테이블을 액세스하는 현상을 의미하며 인덱스로부터 10건의 로(ROW)가 추출되어 테이블을 액세스한다면 10 번의 랜덤 액세스가 발생하며 랜덤 액세스는 다중(Multi) 블록 I/O가 아닌 싱글(Single) 블록 I/O를 수행하므로 이 경우에는 10번의 I/O가 발생하게 된다. 따라서, 이러한 랜덤 액세스는 성능 저하를 발생시키는 주범이 되므로 많은 데이터에 대해서는 인덱스를 이용한 후 랜덤 액세스가 발생하지 않아야 최적의 데이터 액세스가 가능하게 된다.In this case, random access means accessing a table as needed after index access. If 10 rows are extracted from an index and accesses the table, 10 random accesses occur, and random access is multi-block I /. In this case, 10 I / Os occur because single block I / O is performed instead of O. Therefore, since such random access is the main culprit that causes performance degradation, optimal data access is possible when a random access does not occur after using an index for many data.

다음은, 데이터 연결 방법이 사용된 경우에 판단되어, 일반조인, 서브쿼리, 스칼라 서브 쿼리, 순환전개 및 집합 연산자에 의한 것인지를 순차적으로 판단하여 조인 검증을 수행한 후 인덱스의 이용 유무를 결정하여 데이터 액세스를 수행하는 과정에 대하여 첨부된 도 2 내지 도 4를 참조하여 상세하게 설명한다.Next, when the data connection method is used, it is determined by general joins, subqueries, scalar subqueries, recursion and set operators, and performs join verification to determine whether indexes are used. A process of performing data access will be described in detail with reference to FIGS. 2 to 4.

먼저, 도 2에 도시된 바와 같이, 상기 데이터 연결 방법이 사용된 경우로 판단된 경우에는, 1차적으로 일반조인 방법에 의한 것인지를 판단한다(S311). 즉, SQL에서의 데이터 연결 방법이 From 절에서 조인(Join)을 수행할 테이블을 연결하는 방법에 해당하는지를 판단한다.First, as shown in FIG. 2, when it is determined that the data connection method is used, it is determined whether the method is primarily a general join method (S311). That is, it determines whether the data connection method in SQL corresponds to the method of connecting the table to be joined in the From clause.

상기 판단 결과, 일반 조인 방법에 의하여 데이터 연결을 한 경우로 판단된 경우에는 조인 검증 절차를 거친 후, 상기 데이터 연결 방법이 사용되지 않은 경우에 진행되는 절차, 즉 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여 초과하지 않는 경우에는 인덱스를 이용하거나 초과하는 경우에는 테이블의 크기가 기준 크기보다 작거나 랜덤 액세스가 발생하지 않는 경우에는 기준 크기보다 큰 테이블일지라도 인덱스를 이용하며 그 외에는 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하는 절차를 진행한다(S313)(도 2 및 도 5 참조). As a result of the determination, when it is determined that the data connection is made by the general join method, the procedure performed when the data connection method is not used after the join verification procedure, that is, the processing range rate is determined by the index access allowance rate. If it is not exceeded, the index is used. If it is not exceeded, the index is used even if the table size is smaller than the reference size or if the table is larger than the reference size if random access does not occur. In step S313 (see FIGS. 2 and 5), data access is performed.

여기서 조인 검증은 조인을 수행하는 테이블의 순서, 조인 조건의 처리 범위 및 인덱스 검증 및 선정의 우선 순위에 의해 검증을 하며 테이블의 순서는 조인은 참여하는 테이블이 2개 이상이므로 먼저 액세스되는 테이블과 뒤에 액세스되는 테이블이 존재하게 되며 이와 같은 경우 처리 범위가 더 적은 테이블이 먼저 액세스되어야만 최적의 데이터 액세스가 가능하며 조인 조건의 처리 범위에서 조인 조건은 두 테이블을 연결해 주는 연결 고리에 해당하며 먼저 액세스된 테이블로부터 상수로 제공받은 조인 조건 값에 의해 뒤에 액세스되는 테이블의 처리범위가 90%이상 감소할 수 있다면 중첩 루프 조인(Nested Loop Join)을 이용해야 하며 먼저 액세스된 테이블로부터 상수로 제공받은 조인 조건의 값에 의해 뒤에 액세스되는 테이블의 데이터가 90%이상 감소하지 않는다면 해쉬 조인을 이용하며 뒤에 액세스되는 테이블이 조인 조건을 상수로 제공받아 처리 범위의 90%이상이 감소하더라도 해당 SQL이 통계 작업 또는 정기 작업 등에 해당하는 배치(Batch)용 SQL이라면 해쉬 조인을 사용해야 하며, 이를 검증한 후 조인에 참여하는 각각의 테이블에 인덱스 선정 기준에 의해 처리 범위를 최소화시키는 인덱스를 선정하게 되며 여기서 중첩 루프 조인의 뒤에 액세스되는 테이블은 조인 조건을 인덱스에서 처리 범위를 감소시키는 역할을 수행하도록 인덱스를 선정해야 하며 기존에 인덱스를 이용한다면 인덱스 검증을 수행한다.In this case, join validation is performed based on the order of tables that perform joins, the processing scope of join conditions, and the priority of index validation and selection, and the order of tables is that tables that are accessed first and later are joined. The table being accessed will exist, in which case a table with less processing scope must be accessed first for optimal data access. In the processing scope of a join condition, the join condition is a link that connects the two tables. If the range of processing of the table accessed later can be reduced by more than 90% by the join condition value provided as a constant from, the nested loop join should be used and the value of the join condition provided as a constant from the accessed table first More than 90% of the data accessed later by If not, a hash join is used. If the table being accessed is supplied with a join condition as a constant and decreases more than 90% of the scope of processing, the hash join should be used if the SQL is a batch SQL that corresponds to statistics or periodic work. After verifying this, the index that minimizes the processing range is selected for each table participating in the join by the index selection criteria, where the table accessed after the nested loop join reduces the processing range of the join condition in the index. An index must be selected to execute the query. If the existing index is used, index verification is performed.

반면, 판단 결과, 일반조인 방법에 의한 경우가 아닌 경우에는 데이터 연결 방법이 2차적으로 Where 절을 이용하여 데이터를 연결하는 서브쿼리 방법에 의한 것인지를 판단한 후 조인 검증 및 인덱스 사용유무를 결정하여 데이터 액세스를 수 행하는 절차를 거친다.On the other hand, if it is determined that the result is not a general join method, it is determined whether the data connection method is a subquery method that connects data using the Where clause secondaryly, and then determines whether to verify the join and use an index. The access is carried out.

구체적으로, 도 2에 도시된 바와 같이, 상기 데이터 연결 방법이 서브쿼리 방법에 의한 것인지를 판단하는 절차를 수행한다(S315). In detail, as illustrated in FIG. 2, a procedure for determining whether the data connection method is based on a subquery method is performed (S315).

상기 판단 결과, 서브쿼리 방법에 의한 경우에는 주 쿼리에 설정된 테이블의 데이터로부터 서브쿼리에 사용된 테이블에 조인 조건으로 동일한 데이터가 존재하는 지를 확인하는 존재 유무의 쿼리인지를 판단하는 절차를 수행한 후(S317), 존재 유무의 쿼리가 아닌 경우에는 상기 조인 검증 절차를 수행한 후(S313), 상기 데이터 연결 방법이 사용되지 않은 경우에 진행되는 절차, 즉 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여 초과하지 않는 경우에는 인덱스를 이용하거나 초과하는 경우에는 테이블의 크기가 기준 크기보다 작거나 인덱스를 액세한 후 테이블을 액세스하는 랜덤 액세스가 발생하지 않으며(인덱스 스캔만으로 결과 추출) 테이블의 크기가 기준 크기보다 큰 테이블일지라도 인덱스를 이용하고 랜덤 액세스가 발생한다면 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하는 절차를 진행한다(도 2 및 도 5 참조).As a result of the determination, in the case of the subquery method, after determining whether or not the same data exists in the join condition to the table used in the subquery from the data of the table set in the main query, it is determined whether the query exists or not. (S317), if the query does not exist or not, after performing the join verification procedure (S313), it is determined whether or not the procedure performed when the data connection method is not used, that is, the processing coverage ratio exceeds the index access allowance ratio (S317). If it is not exceeded by judging, if the index is used or exceeded, then the size of the table is less than the base size, or random access to access the table after accessing the index does not occur (extract results by index scan only). Even if the table is larger than the reference size, if the index is used and random access occurs Table and using a full scan proceeds a processing to perform a data access (see Fig. 2 and 5).

그리고, 상기 존재 유무의 쿼리인지를 판단한 결과, 존재 유무의 쿼리인 경우에는 서브쿼리를 Exists절로 SQL을 변경하여 조인 검증 절차를 수행한 후, 상기 데이터 연결 방법이 사용되지 않은 경우에 진행되는 절차, 즉 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여 초과하지 않는 경우에는 인덱스를 이용하거나 초과하는 경우에는 테이블의 크기가 기준 크기보다 작거나 인덱스를 엑세한 후 테이블을 액세스하는 랜덤 액세스가 발생하지 않는다면(인덱스 스캔만으로 결과 추출) 테이블의 크기가 기준 크기보다 큰 테이블일지라도 인덱스를 이용하고 랜덤 액세스가 발생한다면 테이블 풀 스캔을 이용하여 데이터 액세스를 수행한다(S319, S313)(도 2 및 도 5 참조).In addition, if it is determined whether the query exists or not, the query proceeds when the data connection method is not used after performing the join verification procedure by changing the SQL to the Exists clause of the subquery in the presence or absence of the query, In other words, if the processing range rate does not exceed the index access allowance rate, the table size is smaller than the reference size or random access to access the table after accessing the index does not occur when the index is used or exceeded. If it does not (extract the result only by index scan), even if the table size is larger than the reference size, if the index is used and random access occurs, data access is performed using the table full scan (S319, S313) (see FIGS. 2 and 5). ).

한편, 상기 데이터 연결 방법이 서브쿼리 방법에 의한 것인지를 판단한 결과, 서브쿼리 방법에 의한 경우가 아닌 경우에는 데이터 연결 방법이 3차적으로 스칼라 서브쿼리 방법에 의한 것인지를 판단한 후 데이터 액세스를 수행하는 절차가 진행된다(S321).On the other hand, as a result of determining whether the data connection method is based on the subquery method, if the data connection method is not based on the subquery method, determining whether the data connection method is based on the scalar subquery method in the third step and then performing data access. Is performed (S321).

이에 대하여, 도 3 및 도 4를 참조하여 구체적으로 설명하면 다음과 같다.This will be described in detail with reference to FIGS. 3 and 4 as follows.

먼저, 상술한 바와 같이, 상기 데이터 연결 방법이 Select 절을 이용하여 데이터를 연결하는 스칼라 서브쿼리 방법에 의한 것인지를 판단하는 절차를 수행한다(S321).First, as described above, a procedure for determining whether the data connection method is based on a scalar subquery method for connecting data using a select clause is performed (S321).

상기 판단 결과, 스칼라 서브쿼리 방법에 의한 경우에는, 해당 SQL에서 From 절에 SQL이 중복 사용되는 인라인 뷰가 사용되는지 여부를 판단하는 절차를 수행한다(S323). 이와 같이 인라인 뷰가 사용되는지 여부를 판단한 결과, 인라인 뷰를 사용하지 않는 경우에는 도 3에 도시된 바와 같이, 스칼라 서브쿼리의 조인 조건에 인덱스가 존재하는지를 판단한다(S329).As a result of the determination, in the case of the scalar subquery method, a procedure of determining whether an inline view in which SQL is used in the From clause is used in the corresponding SQL is performed (S323). As a result of determining whether the inline view is used as described above, when the inline view is not used, as illustrated in FIG. 3, it is determined whether an index exists in the join condition of the scalar subquery (S329).

상기 단계 S329에서 판단한 결과, 상기 스칼라 서브 쿼리의 조인 조건에 인덱스가 존재하지 않는 경우에는 스칼라 서브쿼리에 사용된 테이블의 조인 조건을 중심으로 인덱스를 선정하여 데이터 액세스를 수행한다(S331). 이는 스칼라 서브쿼리는 데이터 연결시 뒤에 액세스되기 때문에 먼저 액세스되는 주 쿼리의 테이블 로부터 조인 조건을 상수로 제공 받게 되므로 인덱스 선정 시 조인 조건의 컬럼은 처리 범위를 최소화시키는 중요한 컬럼으로 역할을 수행하며, 상기 스칼라 서브 쿼리의 조인 조건에 인덱스가 존재하는 경우에는 인덱스 검증 절차를 거쳐서 해당 인덱스 사용이 가능한지를 판단한다(S333, S335).If it is determined in step S329 that the index does not exist in the join condition of the scalar subquery, the index is selected based on the join condition of the table used in the scalar subquery to perform data access (S331). Since the scalar subquery is accessed later when the data is connected, the join condition is provided as a constant from the table of the main query that is accessed first. Therefore, the join condition column serves as an important column to minimize the processing range when selecting an index. If an index exists in the join condition of the scalar subquery, it is determined whether the corresponding index can be used through an index verification procedure (S333 and S335).

상기 인덱스 검증 절차를 거쳐서 해당 인덱스 사용이 가능한 것으로 판단된 경우에는 상기 해당 인덱스를 그대로 사용하여 데이터 액세스를 수행하여 결과 데이터를 추출한다(S337). 만약, 상기 인덱스 검증 절차를 거쳐서 해당 인덱스 사용이 불가능한 것으로 판단된 경우에는 스칼라 서브쿼리에 사용된 테이블에 사용할 수 있는 다른 인덱스가 존재하는지를 판단한다(S339). If it is determined that the corresponding index can be used through the index verification procedure, data access is performed by using the corresponding index as it is (S337). If it is determined that the corresponding index cannot be used through the index verification procedure, it is determined whether there is another index available for the table used for the scalar subquery (S339).

이 판단 결과에 따라 사용할 수 있는 인덱스를 사용하거나 새로운 인덱스를 선정하여 데이터 액세스를 수행하는 절차를 수행한다. 즉, 해당 테이블에 사용할 수 있는 다른 인덱스가 존재하지 않은 경우에는 인덱스를 선정하는 절차를 통해 선정된 인덱스를 이용하여 데이터 액세스를 수행하여 결과 데이터를 추출하고(S341), 해당 테이블에 사용할 수 있는 다른 인덱스가 존재하는 경우에는 상기 단계 S333(인덱스 검증 단계)으로 귀환하여 처리된다. 스칼라 서브쿼리에 사용된 테이블이 이용할 인덱스가 확정된 후에 주 쿼리의 테이블의 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여 초과하지 않는 경우에는 인덱스를 이용하거나 초과하는 경우에는 테이블의 크기가 기준 크기보다 작거나 인덱스를 엑세한 후 테이블을 액세스하는 랜덤 액세스가 발생하지 않는다면(인덱스 스캔만으로 결과 추출) 기준 크기보다 큰 테이블일지라도 인덱스를 이용하고 랜덤 액세스가 발생한다면 테 이블 풀 스캔을 이용하여 데이터 액세스를 수행한다.According to the result of the determination, a procedure for performing data access using an available index or selecting a new index is performed. In other words, if there is no other index available for the table, data access is performed using the selected index through the procedure of selecting the index to extract the result data (S341), and the other index for the table is available. If the index exists, processing returns to step S333 (index verification step). After the index used by the scalar subquery is determined, it is determined whether the processing range rate of the table of the main query exceeds the index access allowance. If a random access that accesses the table after the index is smaller than the size or after accessing the index does not occur (extract results by index scan only), use a table full scan to access the data even if the table is larger than the reference size and random access occurs. Perform

한편, 상기 단계 S323에서 수행되는 절차, 즉 해당 SQL에서 From 절에 SQL을 사용하는 인라인 뷰를 사용하는지를 판단한 결과, 상기 해당 SQL에서 인라인 뷰를 사용한 경우로 판단된 경우에는, 인라인 뷰의 총 건수가 결과 건수를 초과하는지를 판단하는 절차가 수행된다(S325).On the other hand, when it is determined that the procedure performed in the step S323, that is, whether the in-line view using the SQL in the From clause in the SQL, the case that the inline view is used in the corresponding SQL, the total number of inline views A procedure of determining whether the number of results is exceeded is performed (S325).

상기 인라인 뷰의 총건수가 결과 건수를 초과하는지를 판단한 결과, 인라인 뷰의 총 건수가 결과 건수를 초과하는 것으로 판단된 경우에는 주 쿼리로 스칼라 서브쿼리를 이동시킨다(S327). As a result of determining whether the total number of inline views exceeds the number of results, when it is determined that the total number of inline views exceeds the number of results, the scalar subquery is moved to the main query (S327).

그런 후, 상기 단계 S329를 수행하고, 즉 상기 스칼라 서브쿼리의 조인 조건에 인덱스가 존재하는지를 판단하는 절차를 수행하고, 그 판단 결과에 따라 상술한 절차가 진행된다. Thereafter, step S329 is performed, that is, a procedure of determining whether an index exists in the join condition of the scalar subquery is performed, and the above-described procedure is performed according to the determination result.

반면, 상기 인라인 뷰의 총 건수가 결과 건수를 초과하는지를 판단한 결과, 상기 인라인 뷰의 총 건수가 결과 건수 이하인 경우로 판단된 경우에는 주 쿼리로 스칼라 서브쿼리를 이동시키지 않고 상기 단계 S329를 수행하고, 즉 상기 스칼라 서브쿼리의 조인 조건에 인덱스가 존재하는지를 판단하는 절차를 수행하고, 그 판단 결과에 따라 상술한 절차가 진행된다. On the other hand, if it is determined that the total number of inline views exceeds the number of results, and if it is determined that the total number of inline views is less than or equal to the number of results, step S329 is performed without moving the scalar subquery to the main query. That is, a procedure for determining whether an index exists in the join condition of the scalar subquery is performed, and the above-described procedure is performed according to the determination result.

상기 스칼라 서브 쿼리를 주 주 쿼리로 이동시키는 이유는 스칼라 서브쿼리는 해당 SQL에서 추출된 데이터만큼 반복 수행되므로 결과 데이터가 적은 단계에서 수행되어야 하며 인라인 뷰를 사용한 후 결과 데이터가 감소한다면 스칼라 서브쿼리를 가장 바깥쪽인 주 쿼리로 이동시켜 수행 횟수를 감소시키기 위함이다.The reason for moving the scalar subquery to the main main query is that the scalar subquery is repeated as much as the data extracted from the SQL. Therefore, the result data should be performed in a small step. If the result data decreases after using the inline view, the scalar subquery is used. This is to reduce the number of executions by moving to the outermost main query.

한편, 상술한 단계 S321에서의 판단, 즉 상기 데이터 연결 방법이 스칼라 서브쿼리 방법에 의한 것인지를 판단한 결과, 스칼라 서브쿼리 방법에 의한 경우가 아닌 경우에는 데이터 연결 방법이 4차적으로 Connect By...Start With를 사용하여 데이터를 연결하는 순환 전개 방법에 의한 것인지를 판단한 후 인덱스를 이용하여 데이터 액세스를 수행하는 절차가 진행된다. 이에 대해서는 첨부된 도 4를 참조하여 구체적으로 설명한다.On the other hand, if it is determined in step S321 described above, that is, whether the data connection method is based on the scalar subquery method, and if the method is not based on the scalar subquery method, the data connection method is qualitatively connected by ... After determining whether it is based on a circular deployment method that connects data using Start With, a procedure of performing data access using an index is performed. This will be described in detail with reference to FIG. 4.

구체적으로, 도 4에 도시된 바와 같이, 상기 데이터 연결 방법이 순환 전개 방법에 의한 것인지를 판단한 절차를 수행한다(S343). 상기 판단 결과, 순환 전개 방법에 의한 경우로 판단된 경우에는 해당 SQL이 순환 전개에서 최적화된 인덱스를 사용하고 있는지를 판단한다(S345). 예를 들어, CONNECT BY 절에 사용하는 Prior 절 반대편 컬럼에 인덱스가 존재해야 하며 또한, Start With 절에 사용된 컬럼에 인덱스가 있는 경우에는 순환 전개에서 최적화된 인덱스가 사용되는 것으로 판단한다.In detail, as illustrated in FIG. 4, a procedure of determining whether the data connection method is based on a circular expansion method is performed (S343). As a result of the determination, in the case where it is determined that the circular deployment method is used, it is determined whether the corresponding SQL uses the index optimized in the circular expansion (S345). For example, if there is an index on the column opposite the Prior clause used in the CONNECT BY clause, and if there is an index on the column used in the Start With clause, it is determined that the optimized index is used in the circular deployment.

상기와 같이, 해당 SQL이 순환 전개에서 최적화된 인덱스를 사용하고 있는지를 판단한 결과, 최적화된 인덱스를 사용하고 있지 않은 경우로 판단한 경우에는 CONNECT BY 절의 Prior 절 반대편 컬럼과 Start With 절에 사용된 컬럼으로 구성된 각각의 인덱스를 선정하여 데이터 액세스를 수행함으로써 결과 데이터를 추출한다(S349). 반면, 최적화된 인덱스를 사용하고 있는 경우로 판단한 경우에는 인덱스 검증 절차를 거쳐 해당 인덱스가 사용 가능한지 판단한다(S347, 도 3의 S335 참조).As described above, when it is determined that the SQL is using the optimized index in the circular deployment, and when it is determined that the optimized index is not used, the column opposite to the Prior clause of the CONNECT BY clause and the column used in the Start With clause Selected indexes are selected to perform data access to extract result data (S349). On the other hand, if it is determined that the optimized index is used, it is determined whether the corresponding index is available through an index verification procedure (S347, see S335 of FIG. 3).

상기 인덱스 사용 가능 여부를 판단한 결과, 해당 인덱스 사용이 가능하면, 해당 인덱스를 그대로 사용하고, 해당 인덱스 사용이 불가능하면, 해당 테이블에 사용할 수 있는 다른 인덱스를 사용하거나 새로운 인덱스를 선정하여 데이터 액세스를 수행하는 절차를 수행한다.As a result of determining whether the index can be used, if the index can be used, the index is used as it is, and if the index is not available, data access is performed by using another index available for the table or selecting a new index. Follow the procedure.

구체적으로, 상기 인덱스 검증 절차를 거쳐서 해당 인덱스 사용이 가능한 것으로 판단된 경우에는 상기 해당 인덱스를 그대로 사용하여 데이터 액세스를 수행하여 결과 데이터를 추출한다(S337). 만약, 상기 인덱스 검증 절차를 거쳐서 해당 인덱스 사용이 불가능한 것으로 판단된 경우에는 해당 테이블에 사용할 수 있는 다른 인덱스가 존재하는지를 판단한다(S339). In detail, when it is determined that the corresponding index can be used through the index verification procedure, data access is performed by using the corresponding index as it is (S337). If it is determined that the index cannot be used through the index verification procedure, it is determined whether there is another index that can be used in the table (S339).

이 판단 결과에 따라 사용할 수 있는 인덱스를 사용하거나 새로운 인덱스를 선정하여 데이터 액세스를 수행하는 절차를 수행한다. 즉, 해당 테이블에 사용할 수 있는 다른 인덱스가 존재하지 않은 경우에는 인덱스를 선정하는 절차를 통해 선정된 인덱스를 이용하여 데이터 액세스를 수행하여 결과 데이터를 추출하고(S341), 해당 테이블에 사용할 수 있는 다른 인덱스가 존재하는 경우에는 상기 단계 S333(인덱스 검증 단계)으로 귀환하여 처리된다. According to the result of the determination, a procedure for performing data access using an available index or selecting a new index is performed. In other words, if there is no other index available for the table, data access is performed using the selected index through the procedure of selecting the index to extract the result data (S341), and the other index for the table is available. If the index exists, processing returns to step S333 (index verification step).

순환 전개에 사용된 테이블이 사용할 인덱스가 확정된 후에 주 쿼리가 존재한다면 주 쿼리의 테이블의 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여 초과하지 않는 경우에는 인덱스를 이용하거나 초과하는 경우에는 테이블의 크기가 기준 크기보다 작거나 인덱스를 엑세한 후 테이블을 액세스하는 랜덤 액세스가 발생하지 않는다면(인덱스 스캔만으로 결과 추출) 기준 크기보다 큰 테이블 일자라도 인덱스를 이용하고 랜덤 액세스가 발생한다면 테이블 풀 스캔을 이용하여 데이터 액세스를 수행한다.If the main query exists after the index used by the table used for circular deployment has been established, it is determined whether the processing range rate of the main query's table exceeds the index access allowance. If the size of the table is smaller than the reference size or random access to the table after accessing the index does not occur (extract results by index scan only), then if the table date is larger than the reference size, the index is used and random access occurs. To perform data access.

한편, 상기 단계 S343에서 판단한 결과, 상기 데이터 연결 방법이 순환 전개 방법에 의한 경우가 아닌 경우로 판단된 경우에는 데이터 연결 방법이 5차적으로 Union All, Union 등의 집합 연산자 방법에 의한 것인지를 판단한 후 인덱스 사용 유무를 결정하여 데이터 액세스를 수행하는 절차를 수행한다.On the other hand, if it is determined in step S343 that the data connection method is not the case by the circular expansion method, after determining whether the data connection method is based on a set operator method such as Union All, Union, etc. Performs data access by determining whether to use an index.

이에 대하여 첨부된 도 4를 참조하여 구체적으로 설명하면 다음과 같다.This will be described in detail with reference to the accompanying FIG. 4.

상기 데이터 연결 방법이 집합 연산자 중 Union 집합 연산자 방법에 의한 것인지를 판단한 결과(S351), Union 집합 연산자 방법에 의한 경우로 판단된 경우에는 Union All로 변경 가능한지를 판단하는 절차를 수행한다(S353).As a result of determining whether the data connection method is based on the union set operator method among the set operators (S351), when it is determined that the data connection method is based on the union set operator method (S353), it is determined whether it is possible to change to Union All (S353).

이 판단 결과, Union All로 변경 가능한 경우로 판단된 경우에는 Union All로 SQL을 변경하는 절차를 수행한다(S355). 그런 다음, Union All에 의해 데이터 연결이 수행된 두 개의 SQL에서 동일 테이블을 액세스하고 있는지를 판단한다(S357).As a result of this determination, if it is determined that the change to Union All is possible, the procedure of changing the SQL to Union All is performed (S355). Then, it is determined whether union SQL is accessing the same table in the two SQL data connection is performed (S357).

상기와 같이 동일 테이블을 액세스하고 있는지를 판단한 결과, 동일 테이블을 액세스하고 있는 경우로 판단된 경우에는 테이블을 한 번만 액세스하도록 SQL을 변경한다(S359). As a result of determining whether the same table is being accessed as described above, if it is determined that the same table is being accessed, the SQL is changed to access the table only once (S359).

테이블을 한 번만 액세스하도록 업무를 고려하여 SQL을 변경한 후 처리 범위율이 인덱스 액세스 허용율을 초과하지 않는다면 인덱스를 이용하고 초과한다면 테이블의 크기가 기준 크기보다 작거나 인덱스 액세스후 테이블을 액세스하는 랜덤 액세스가 발생하지 않는 인덱스를 이용할 수 있다면 기준 크기보다 큰 테이블일지라도 인덱스를 이용하고 그렇지 않고 랜덤 액세스가 발생하는 경우에는 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하고, 상기 절차는 집합 연산자에 존재하는 테이블의 개수만큼 반복 수행하며, 여기서 Union All과 Union의 차이는 두 집합의 교집합을 한번 더 액세스하여 결과로 추출하는가의 차이이며 업무적으로 두 집합의 교집합이 한번만 결과로 추출해도 되고 두번 추출해도 상관이 없다면 언제나 Union을 Union All로 변경할 수 있으며, 동일 테이블을 두 번 액세스하여 결과를 추출하는 것은 업무를 고려하여 한번 액세스한 테이블의 데이터를 메모리에서 가공하여 복제하는 방식을 사용하여 한번만 액세스하게 변경한다. If you change the SQL to take account of accessing the table only once, then use the index if the processing range rate does not exceed the index access allowance, and if the table size is smaller than the base size or random access the table after the index access. If a non-access index can be used, even if the table is larger than the reference size, the index is used. If random access occurs, data access is performed using a table full scan. Repeat the number of times, where the difference between Union All and Union is the difference between accessing two sets of intersections and extracting them as a result.In business, the intersection of two sets may be extracted only once or twice. If not, always change the union to Union All. In order to extract the result by accessing the same table twice, it is changed to access only once using the method of processing and replicating the data of the accessed table once in memory in consideration of the task.

또한, 상술한 단계 S353을 통해 상기 Union All로 변경 가능한지를 판단한 결과, Union All로 변경하는 것이 불가능한 경우로 판단된 경우에는 Union All로 SQL을 변경하는 절차(S355)를 수행하지 않고, 상기 동일 테이블을 액세스하고 있는지를 판단하는 절차를 수행한다(S357). 이 판단 결과에 따라 진행되는 절차는 상술한 바와 동일하다.In addition, when it is determined that the change to Union All is possible through the above-described step S353, if it is determined that it is impossible to change to Union All, the same table is not performed without performing the procedure of changing SQL to Union All (S355). In step S357, a procedure for determining whether or not access is to be performed. The procedure proceeding according to the determination result is the same as described above.

또한, 상술한 단계 S351을 통해 상기 데이터 연결 방법이 Union 집합 연산자 방법에 의한 것인지를 판단한 결과, UNION 집합 연산자 방법에 의하지 않은 경우로 판단된 경우에는 다른 집합 연산자를 의미하게 되며, 상기 동일 테이블을 액세스하고 있는지를 판단하는 절차(S357)를 수행한다. 이 판단 결과에 따라 진행되는 절차는 상술한 바와 동일하다. In addition, as a result of determining whether the data connection method is based on the union set operator method through step S351 described above, when it is determined that the data connection method is not based on the UNION set operator method, it means another set operator and accesses the same table. The procedure for determining whether the operation is performed (S357). The procedure proceeding according to the determination result is the same as described above.

여기서 집합 연산자에 의해 추출되는 데이터가 인덱스 액세스 허용율을 초과 하지 않는 경우에는 인덱스를 이용하여 데이터를 액세스하게 되며 인덱스 액세스 허용율을 초과한다면 테이블의 크기가 기준 크기보다 작거나 랜덤 액세스가 발생하지 않는다면 테이블의 기준 크기보다 큰 테이블일지라도 인덱스를 이용하고 랜덤 액세스가 발생한다면 테이블 풀 스캔을 이용하여 데이터를 액세스하며, 이는 집합 연산자를 기준으로 각각의 SQL에 적용된다.If the data extracted by the set operator does not exceed the index access allowance, the data is accessed using the index. If the index access allowance is exceeded, the size of the table is smaller than the reference size or random access does not occur. Even if the table is larger than the standard size of the table, if the index is used and random access occurs, the data is accessed by using a table full scan, which is applied to each SQL based on the set operator.

다음은, 도 1에 도시된 바와 같이, 데이터 연결 방법이 사용되지 않은 경우로 판단되어, 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여 초과하지 않는 경우에는 인덱스를 이용하고 초과하는 경우에는 테이블의 크기가 기준 크기보다 작거나 인덱스를 엑세한 후 테이블을 액세스하는 랜덤 액세스가 발생하지 않는다면(인덱스 스캔만으로 결과 추출) 테이블의 크기가 기준 크기보다 큰 테이블일지라도 인덱스를 이용하고 랜덤 액세스가 발생한다면 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하는 과정에 대하여 첨부된 도 5 및 도 6을 참조하여 상세하게 설명한다.Next, as shown in FIG. 1, it is determined that the data connection method is not used, and it is determined whether the processing range rate exceeds the index access allowance rate, and the index is used when the rate is not exceeded. If the size of the table is smaller than the reference size or random access to the table after accessing the index does not occur (extract result by index scan only) A process of performing data access using a full scan will be described in detail with reference to FIGS. 5 and 6.

먼저, 도 5에 도시된 바와 같이, 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하는 절차를 수행한다(S411). 여기서, 상기 처리 범위율은 테이블 전체 로(Row) 중 해당 조건을 만족하는 로(Row) 수의 비율을 의미하는 것이고, 상기 인덱스 액세스 허용율은 테이블 풀 스캔시 사용하는 한번의 I/O에 여러 데이터 블록을 액세스하는 다중 블록 I/O를 고려하여 이를 백분율로 환산하여 랜덤 액세스에 의한 부하 가중치(0.5)를 곱하여 산출하며 그 값은 대략 3% 정도이다. First, as shown in FIG. 5, a procedure for determining whether the processing range rate exceeds the index access permission rate is performed (S411). Herein, the processing range ratio refers to a ratio of the number of rows satisfying a corresponding condition among the rows of the entire table, and the index access allowance ratio is set to one I / O used during a table pool scan. Considering the multi-block I / O accessing the data block, it is calculated by multiplying by the percentage by multiplying the load weight (0.5) by the random access, the value is about 3%.

상기와 같이, 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단한 결과, 상기 처리 범위율이 인덱스 액세스 허용율을 초과하는 경우로 판단된 경우 테이블의 크기를 확인하며 테이블의 기준 크기는 (데이터 블록 크기)*10000*(다중 블록 I/O 개수)/2이며 여기서 데이터 블록 크기는 데이터를 저장하는 디스크 블록의 크기이며 10000은 인덱스를 이용하여 데이터를 액세스하는 경우 인덱스를 이용하는 온라인 SQL은 10000미만의 데이터 블록을 액세스해야 온라인으로 자격을 부여받기 때문이고 (다중 블록 I/O 개수)/2는 테이블 풀 스캔에 대한 보정 값이며 테이블의 크기가 기준 크기를 초과하는지를 판단하는 절차를 수행한다(S413). As described above, as a result of determining whether the processing range rate exceeds the index access allowance rate, if it is determined that the processing coverage rate exceeds the index access allowance rate, the size of the table is checked and the reference size of the table is (data block size). ) * 10000 * (number of multiblock I / Os) / 2, where the data block size is the size of the disk block that stores the data, and 10000 is less than 10000 data for online SQL using indexes when accessing data using indexes. This is because the access to the block is required to qualify online, and (number of multiple block I / Os) / 2 is a correction value for the table full scan, and a procedure for determining whether the size of the table exceeds the reference size is performed (S413).

이와 같이 판단하는 이유는 처리 범위율이 인덱스 액세스 허용율을 초과하더라도 테이블의 크기가 작은 경우에는 인덱스를 이용하여 데이터 액세스를 수행하는 경우를 고려한 것이다. 이는 인덱스 액세스 허용률이 대용량의 데이터에만 적용되기 때문이다.The reason for this determination is to consider a case where data access is performed using an index when the size of the table is small even if the processing range rate exceeds the index access allowance rate. This is because the index access allowance is only applied to a large amount of data.

상기와 같이, 테이블의 크기가 기준 크기를 초과하는지를 판단한 결과, 테이블의 크기가 기준 크기를 초과하는 경우로 판단된 경우에는 인덱스를 이용하거나 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하고(도 5에 도시된 절차), 테이블의 크기가 기준 크기 이하인 경우에는 인덱스를 이용하여 데이터 액세스를 수행하는 절차를 수행한다(도 6에 도시된 절차). 한편, 상기 단계 S411을 통해 판단한 결과, 상기 처리 범위율이 인덱스 액세스 허용율 이하인 경우에는 인덱스를 이용하여 데이터 액세스를 수행하는 절차를 수행한다(도 6에 도시된 절차).As described above, as a result of determining whether the size of the table exceeds the reference size, if it is determined that the size of the table exceeds the reference size, data access is performed using an index or a table pull scan (see FIG. 5). In the illustrated procedure, when the size of the table is smaller than or equal to the reference size, a procedure of performing data access using an index is performed (procedure shown in FIG. 6). On the other hand, as a result of the determination in step S411, when the processing coverage ratio is less than or equal to the index access allowance rate, a procedure of performing data access using an index is performed (procedure shown in FIG. 6).

상기 단계 S413을 통해 판단한 결과, 상기 테이블의 크기가 기준 크기를 초 과하는 경우에 인덱스를 이용하거나 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하는 과정에 대하여 첨부된 도 5를 참조하여 설명하면 다음과 같다.As a result of the determination in step S413, the size of the table exceeds the reference size. In this case, a process of performing data access using an index or a table full scan will be described with reference to FIG. 5.

먼저, 추출하는 건수와 처리 범위가 동일한지를 판단한다(S415). 이와 같이 추출하는 건수와 처리 범위가 동일한지를 판단한 결과, 추출하는 건수와 처리 범위가 동일한 경우로 판단된 경우에는 인덱스 스캔(Index Scan)만으로 결과 추출이 가능한지를 판단하는 절차를 수행한다(S425).First, it is determined whether the number of extracts and the processing range are the same (S415). As a result of determining whether the number of extracted extracts and the processing range are the same, when it is determined that the number of extracted extracts and the processing range are the same, a procedure of determining whether the result extraction is possible using only an index scan is performed (S425).

상기와 같이 인덱스 스캔만으로 결과 추출이 가능한지를 판단한 결과, 인덱스 스캔만으로 결과 추출이 가능한 경우로 판단된 경우에는 인덱스 검증에 따라 사용 가능한 인덱스이면 해당 인덱스를 이용하여 데이터 액세스를 수행하고, 사용 가능한 인덱스가 아니면 테이블 풀 스캔을 이용하여 데이터 액세스를 수행함으로써, 결과 데이터를 추출하는 절차가 진행된다(S427, S429 및 S431). 여기서 인덱스 검증은 처리 범위 감소도 중요하지만 랜덤 액세스에 중점을 두어 랜덤 액세스가 발생하지 않는 인덱스를 선택하도록 검증한다.As a result of determining whether it is possible to extract the result only by the index scan as described above, when it is determined that the result can be extracted by the index scan only, if the index is available according to the index verification, data access is performed using the corresponding index. Otherwise, a procedure of extracting the result data is performed by performing data access using a table full scan (S427, S429 and S431). Here, the index verification is important to reduce the processing range, but focuses on the random access, and verifies that the index that the random access does not occur is selected.

반면, 상기 인덱스 스캔만으로 결과 추출이 가능한지를 판단한 결과, 상기 인덱스 스캔만으로 결과 추출이 불가능한 경우로 판단된 경우에는 테이블 풀 스캔을 이용하여 데이터 액세스를 수행함으로써, 결과 데이터를 추출한다(S435).On the other hand, as a result of determining whether the result extraction is possible only by the index scan, and when it is determined that the result extraction is not possible by the index scan only, the result data is extracted by performing data access using a table full scan (S435).

한편, 상기 S415 단계를 통해 상기 추출하는 건수와 처리 범위가 동일한지를 판단한 결과, 추출하는 건수와 처리 범위가 동일하지 않은 경우로 판단된 경우에는 SQL에 Min, Max 및 Sum 등의 집합 함수가 사용된 경우이며 추출 건수가 인덱스 액세스 허용율을 초과하는지를 판단하는 절차를 수행한다(S417).On the other hand, as a result of determining whether the extracted number and the processing range is the same through the step S415, when it is determined that the extracted number and the processing range is not the same, a set function such as Min, Max and Sum is used in SQL. In this case, a procedure of determining whether the number of extracts exceeds the index access permission rate is performed (S417).

이와 같이 추출 건수가 인덱스 액세스 허용율을 초과하는지를 판단한 결과,추출 건수가 인덱스 액세스 허용율을 초과하는 경우로 판단된 경우에는 상술한 단계 S425 절차를 수행한다. 즉, 상기 랜덤 액세스를 발생시키지 않는 인덱스 스캔만으로 결과 추출이 가능한지를 판단하는 절차를 수행한다. 이 판단 결과에 따라 진행되는 절차는 상술한 절차와 동일하다.As a result of determining whether the number of extractions exceeds the index access permission rate as described above, when it is determined that the number of extractions exceeds the index access permission rate, the above-described step S425 is performed. That is, a procedure for determining whether the result extraction is possible by only the index scan that does not generate the random access is performed. The procedure proceeding according to the determination result is the same as the procedure described above.

반면, 추출 건수가 인덱스 액세스 허용율을 초과하는지를 판단한 결과, 상기 추출 건수가 인덱스 액세스 허용율 이하인 경우로 판단된 경우에는 추출되는 데이터에 기준 데이터가 존재하는지를 판단하는 절차를 수행한다(S419). 예를 들어, 추출되는 데이터에 일자 형태 등의 일정한 포맷이 있는 데이터가 존재하는 경우에는 기준 데이터가 존재하는 것으로 판단한다.On the other hand, if it is determined that the number of extractions exceeds the index access allowance rate, and when it is determined that the number of extractions is less than or equal to the index access allowance rate, a procedure of determining whether reference data exists in the extracted data is performed (S419). For example, when data having a predetermined format such as a date form exists in the extracted data, it is determined that reference data exists.

상기와 같이 추출되는 데이터에 기준 데이터가 존재하는지를 판단한 결과, 기준 데이터가 존재하는 경우로 판단된 경우에는 상기 기준 데이터를 주 쿼리에서 결과로 추출하고 Min, Max 및 Sum 등의 그룹 함수에 의해 감소하는 데이터를 스칼라 서브쿼리로 변경한다(S421). 그런 후, 인덱스를 선정하여 데이터 액세스를 수행함으로써, 결과 데이터를 추출한다(S423).As a result of determining whether the reference data exists in the extracted data as described above, if it is determined that the reference data exists, the reference data is extracted as a result from the main query and reduced by a group function such as Min, Max, and Sum. The data is changed to a scalar subquery (S421). Thereafter, the index is selected to perform data access to extract the result data (S423).

반면, 추출되는 데이터에 기준 데이터가 존재하는지를 판단한 결과, 상기 기준 데이터가 존재하지 않은 경우로 판단된 경우에는 테이블 풀 스캔을 이용하여 데이터 액세스를 수행함으로써, 결과 데이터를 추출한다(S435).On the other hand, as a result of determining whether reference data exists in the extracted data, when it is determined that the reference data does not exist, the result data is extracted by performing data access using a table pull scan (S435).

한편, 상술한 단계 S411을 통해 처리 범위율이 인덱스 액세스 허용율 이하인 경우로 판단되거나, 상술한 단계 S413을 통해 테이블의 크기가 기준 크기 이하인 경우로 판단된 경우에는 인덱스를 이용하여 데이터 액세스를 수행한다. 이하에서는 상기 테이블의 크기가 기준 크기 이하인 경우 또는 상기 처리 범위율이 인덱스 액세스 허용율 이하인 경우 수행되는 인덱스를 이용한 데이터 액세스 과정에 대하여 첨부된 도 6을 참조하여 설명한다.On the other hand, if it is determined in step S411 that the processing range ratio is less than or equal to the index access permission rate, or if in step S413 the table size is determined to be less than or equal to the reference size, data access is performed using the index. . Hereinafter, a data access process using an index performed when the size of the table is less than or equal to the reference size or when the processing range ratio is less than or equal to the index access permission will be described with reference to FIG. 6.

먼저 해당 SQL이 인덱스를 이용하는지를 판단하는 절차를 수행한다(S437). First, a procedure of determining whether a corresponding SQL uses an index is performed (S437).

상기와 같이 해당 SQL이 인덱스를 이용하는지를 판단한 결과, 해당 SQL이 인덱스를 이용하고 있는 경우로 판단된 경우에는 인덱스 검증을 통해 해당 인덱스가 사용 가능한지를 판단하는 절차를 수행한다(S439, S441).As a result of determining whether the corresponding SQL uses the index as described above, when it is determined that the corresponding SQL uses the index, a procedure of determining whether the corresponding index is available through the index verification is performed (S439 and S441).

이 판단 결과, 상기 해당 인덱스가 사용 가능한 것으로 판단된 경우라면 해당 인덱스를 이용하여 데이터 액세스를 수행함으로써, 결과 데이터를 추출한다(S443).As a result of this determination, if it is determined that the corresponding index is available, the result data is extracted by performing data access using the corresponding index (S443).

반면, 판단 결과, 처리 범위 및 확인 랜덤 액세스의 양이 많아 해당 인덱스가 사용 불가능한 것으로 판단된 경우라면 해당 테이블에 추가적인 인덱스가 존재하는지를 판단하는 절차를 수행한다(S445). 이와 같이, 해당 테이블에 추가적인 인덱스가 존재하는지를 판단하고, 그 결과에 따라 해당 인덱스를 사용하거나 다른 인덱스를 선정하여 데이터 액세스를 수행함으로써, 결과 데이터를 추출한다.On the other hand, if it is determined that the corresponding index is not available due to the large amount of processing range and the confirmed random access, a procedure for determining whether an additional index exists in the corresponding table is performed (S445). As such, it is determined whether additional indexes exist in the corresponding table, and the result data is extracted by performing data access by using the corresponding index or selecting another index according to the result.

이와 같이, 상기 해당 인덱스가 사용 불가능하면 해당 테이블에 추가적인 인덱스가 존재하는지를 판단하고, 이 판단 결과에 따라 해당 인덱스를 사용하거나 다른 인덱스를 선정하여 데이터 액세스를 수행하는데, 이와 같은 과정에 대하여 구체적으로 설명하면 다음과 같다.As such, when the corresponding index is not available, it is determined whether an additional index exists in the corresponding table, and data access is performed by using the corresponding index or selecting another index according to the determination result. Is as follows.

먼저, 해당 테이블에 추가적인 인덱스가 존재하는지를 판단한 결과, 상기 해당 테이블에 추가적인 인덱스가 존재하는 않은 경우에는 인덱스를 선정하여 데이터 액세스를 수행함으로써, 결과 데이터를 추출한다(S447).First, as a result of determining whether an additional index exists in the corresponding table, and if an additional index does not exist in the corresponding table, the data is extracted by selecting an index to perform data access (S447).

반면, 해당 테이블에 추가적인 인덱스가 존재하는지를 판단한 결과, 상기 해당 테이블에 추가적인 인덱스가 존재한 경우로 판단된 경우에는, 처리 범위를 감소시킬 수 있는 인덱스가 존재하는지를 판단하는 절차를 수행한다(S449).On the other hand, as a result of determining whether an additional index exists in the corresponding table, when it is determined that the additional index exists in the corresponding table, a procedure of determining whether an index capable of reducing the processing range exists is performed (S449).

이와 같이, 처리 범위를 감소시킬 수 있는 인덱스가 존재하는지를 판단한 결과, 처리 범위를 감소시킬 수 있는 인덱스가 존재하는 경우로 판단된 경우에는 인덱스 검증을 통해 해당 인덱스가 사용 가능한지를 판단하는 절차를 수행한다(S451, S453).As described above, when it is determined that there is an index that can reduce the processing range, and when it is determined that an index that can reduce the processing range exists, a procedure for determining whether the corresponding index is available through index verification is performed. (S451, S453).

이 판단 결과, 사용 가능한 인덱스이면 이 인덱스를 사용하여 데이터 액세스를 수행함으로써, 결과 데이터를 추출하고(S455). 사용 불가능한 인덱스이면 상기 해당 테이블에 추가적인 인덱스가 존재하는지를 판단하는 절차를 반복 수행한다(S449).As a result of this determination, if the available index is used, data access is performed using this index, thereby extracting the result data (S455). If the index is unavailable, the procedure of determining whether an additional index exists in the corresponding table is repeated (S449).

상기 단계 S449를 통해 처리 범위를 감소시킬 수 있는 인덱스가 존재하는지를 판단한 결과, 상기 처리 범위를 감소시킬 수 있는 인덱스가 존재하지 않은 경우로 판단된 경우에는 스킵 스캔(Skip Scan)이 적용 가능한지를 판단하는 절차를 수행한다(S457).As a result of determining whether there is an index that can reduce the processing range through step S449, when it is determined that there is no index that can reduce the processing range, it is determined whether a skip scan is applicable. Perform the procedure (S457).

이와 같이, 스킵 스캔(Skip Scan)이 적용 가능한지를 판단한 결과, 스킵 스캔(Skip Scan)이 적용 가능하다면 스킵 스캔(Skip Scan)을 고려하여 SQL을 변경하 는 절차를 수행한다(S459). 그런 후, 상술한 단계 S451을 수행한다. 즉, 인덱스 검증을 통해 사용 가능한 인덱스이면 이 인덱스를 사용하여 데이터 액세스를 수행하고, 사용 불가능한 인덱스이면 상기 해당 테이블에 처리 범위를 감소시키는 추가적인 인덱스도 이미 검증을 통해 존재하지 않게 되며(S449) 스킵 스캔(Skip Scan)도 불가능하므로 새로운 인덱스를 선정하여 데이터 액세스를 수행함으로써, 결과 데이터를 추출한다(S447). As a result of determining whether the skip scan is applicable as described above, if the skip scan is applicable, the procedure of changing the SQL in consideration of the skip scan is performed (S459). Then, step S451 described above is performed. In other words, if the index is available through index verification, data access is performed using the index. If the index is unavailable, additional indexes that reduce the processing scope of the table do not already exist through verification (S449). Skip scan Since (Skip Scan) is also impossible, the result data is extracted by selecting a new index and performing data access (S447).

여기서 스킵 스캔(Skip Scan)의 적용 가능 여부는 인덱스를 구성하는 컬럼 중 Where 절에 존재하지 않는 인덱스의 앞쪽 컬럼이 분포도가 나쁜 경우 적용이 가능하며, 분포도가 나쁘다는 의미는 해당 컬러의 값의 카디날리티(Cardinality)가 낮다는 의미이며, 예를 들어, 성별 컬럼은 여성 또는 남성이 되므로 카디날리티가 낮은 컬럼이며, 인덱스를 성별 컬럼, 카드번호 컬럼, 거래일자 컬럼 순으로 생성했으며 Where 절에는 카드번호 조건과 거래일자 조건이 설정된다면 해당 SQL은 인덱스를 이용할 수 없는 것이 기본이며, 하지만 성별 컬럼이 여성 또는 남성만 되므로 Where 절에 성별= '남성' OR 성별 = '여성'을 설정하게 되면 성별 컬럼이 Where 절에 설정되므로 해당 인덱스를 이용할 수 있게 되며 이를 이용하는 것을 스킵 스캔(Skip Scan)이라고 하며 이 처럼 인덱스 컬럼의 앞 컬럼이 Where 절에 존재하지 않고 해당 컬럼의 카디날리티(Cardinality)가 낮을 경우 스킵 스캔을 사용할 수 있다.The skip scan can be applied when the front column of the index that does not exist in the Where clause among the columns constituting the index is poorly distributed, and the bad distribution means the cardinal of the value of the corresponding color. This means that the cardinality is low. For example, the gender column is female or male, so the cardinality is low. The index is created in the following order: gender column, card number column, and transaction date column. If the conditions and transaction date conditions are set, the SQL defaults to not using indexes, but since the gender column is only female or male, if you set gender = 'male' OR gender = 'female' in the Where clause, Because it is set in the Where clause, the index is available and the use of this index is called a skip scan. If the previous column does not exist in the Where clause lower the Cardinality (Cardinality) of the column can be used to skip scan.

한편, 상술한 단계 S437을 통해 해당 SQL이 인덱스를 이용하는지를 판단한 결과, 상기 해당 SQL이 인덱스를 이용하고 있지 않은 경우로 판단된 경우에는 처리 범위를 감소시킬 수 있는 다른 인덱스가 존재하는지를 판단하는 절차를 수행한다(S461).On the other hand, as a result of determining whether the corresponding SQL uses the index through the above-described step S437, if it is determined that the corresponding SQL does not use the index, a procedure for determining whether there is another index that can reduce the processing range is performed. It performs (S461).

이와 같이, 처리 범위를 감소시킬 수 있는 다른 인덱스가 존재하는지를 판단한 결과, 처리 범위를 감소시킬 수 있는 다른 인덱스가 존재하는 경우로 판단된 경우에는 해당 인덱스 검증을 통하여 사용 가능한 인덱스인지를 판단하는 절차를 수행한다(S465, S467). 이 판단 결과, 사용 가능한 인덱스이면 해당 인덱스를 사용하여 데이터 액세스를 수행함으로써, 결과 데이터를 추출하고(S469), 사용 불가능하면 상기 처리 범위를 감소시킬 수 있는 다른 인덱스가 존재하는지를 판단하는 절차를 반복 수행한다(S461).As such, when it is determined that there is another index that can reduce the processing range, and when it is determined that there is another index that can reduce the processing range, a procedure for determining whether the index is available through the index verification is performed. It performs (S465, S467). As a result of this determination, if the index is available, the data is accessed using the index, thereby extracting the result data (S469), and if it is unavailable, repeating the procedure of determining whether there is another index that can reduce the processing range. (S461).

한편, 상기 처리 범위를 감소시킬 수 있는 다른 인덱스가 존재하는지를 판단한 결과, 다른 인덱스가 존재하지 않은 경우에는 인덱스를 선정하여 데이터 액세스를 수행함으로써, 결과 데이터를 추출한다(S463).On the other hand, as a result of determining whether there is another index that can reduce the processing range, and if no other index exists, the index data is selected and data access is performed to extract the result data (S463).

도 1 내지 도 6은 본 발명의 실시예에 따른 데이터베이스 액세스 방법에 관한 세부 절차도이다.1 to 6 are detailed flowcharts of a database access method according to an embodiment of the present invention.

Claims (10)

데이터베이스의 액세스 방법에 있어서,In the database access method, 입력되는 SQL을 통하여 데이터 연결 방법이 사용되고 있는지 판단하는 단계;Determining whether a data connection method is used through the input SQL; 상기 판단 결과, 데이터 연결 방법이 사용된 경우에는 데이터 연결 방법이 일반조인, 서브쿼리, 스칼라 서브 쿼리, 순환전개 및 집합 연산자에 의한 것인지를 순차적으로 판단한 후 조인 검증 후 처리 범위, 테이블의 크기와 랜덤 액세스를 고려하여 인덱스의 사용 유무를 결정하여 데이터 액세스를 수행하고, 데이터 연결 방법이 사용되지 않은 경우에는 처리 범위율이 인덱스 액세스 허용율을 초과하는지와 테이블의 크기 및 랜덤 액세스의 양을 판단하여 인덱스를 이용하거나 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하는 단계;를 포함하여 이루어진 것을 특징으로 하는 데이터베이스 액세스 방법.As a result of the determination, when the data connection method is used, the data connection method is sequentially determined by the general join, subquery, scalar subquery, recursion, and set operators. Data access is performed by determining the use of indexes in consideration of access, and when the data connection method is not used, indexes are determined by determining whether the processing range rate exceeds the index access allowance rate, the size of the table, and the amount of random access. Performing data access by using or using a table full scan. 청구항 1에 있어서,The method according to claim 1, 상기 데이터 연결 방법이 사용된 경우에는, 일반조인 방법에 의한 것인지를 판단하여, 일반조인 방법에 의한 경우에는 조인 검증 후, 처리 범위율이 인덱스 액세스 허용율을 초과하는지와 테이블의 크기 및 랜덤 액세스의 양을 판단하여 인덱스를 이용하거나 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하고, 일반조인 방법에 의한 경우가 아닌 경우에는 데이터 연결 방법이 서브쿼리 방법에 의한 것인지를 판단한 후 인덱스의 이용 유무를 결정하여 데이터 액세스를 수행하는 것을 특징으로 하는 데이터베이스 액세스 방법.If the data linking method is used, it is determined whether it is by a general join method. In the case of the general join method, after join verification, whether the processing range rate exceeds the index access allowance rate and the size of the table and random access are determined. Data access is performed using the index or table full scan by judging the amount, and if it is not the case of the general join method, it is determined whether the data connection method is the subquery method, and then the use of the index is determined. A method of accessing a database, characterized in that to perform data access. 청구항 2에 있어서,The method according to claim 2, 상기 데이터 연결 방법이 서브쿼리 방법에 의한 것인지를 판단한 결과, 서브쿼리 방법에 의한 경우에는 As a result of determining whether the data connection method is based on the sub query method, 존재 유무의 쿼리인지를 판단하여, 존재 유무의 쿼리가 아닌 경우에는 조인 검증 후, 처리 범위율이 인덱스 액세스 허용율을 초과하는지와 테이블의 크기 및 랜덤 액세의 양을 판단하여 인덱스를 이용하거나 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하고, 존재 유무의 쿼리인 경우에는 Exists절로 변경하여 조인 검증 후, 처리 범위율이 인덱스 액세스 허용율을 초과하는지와 테이블의 크기 및 랜덤 액세스의 양을 판단하여 인덱스를 이용하거나 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하고,If it is a query with or without a query, and if it is not a query with or without a query, after join verification, the index is used to determine whether the processing range rate exceeds the index access allowance rate, the size of the table, and the amount of random access. Access the data using a scan, and in the case of a query that exists or not, change the Exists clause to verify the join, and then determine whether the processing range rate exceeds the index access rate, the size of the table, and the amount of random access to determine the index. Access the data using a table full scan, or 서브쿼리 방법에 의한 경우가 아닌 경우에는 데이터 연결 방법이 스칼라 서브쿼리 방법에 의한 것인지를 판단한 후 인덱스의 이용 유무를 결정하여 데이터 액세스를 수행하는 것을 특징으로 하는 데이터베이스 액세스 방법.And when the data connection method is not based on the scalar subquery method, determines whether the index is used, and then performs data access when the data connection method is not the case of the subquery method. 청구항 3에 있어서,The method according to claim 3, 상기 데이터 연결 방법이 스칼라 서브쿼리 방법에 의한 것인지를 판단한 결과, 스칼라 서브쿼리 방법에 의한 경우에는,As a result of determining whether the data connection method is based on a scalar subquery method, when the scalar subquery method is used, 해당 SQL에서 인라인 뷰 사용 여부를 판단하여, 인라인 뷰를 사용하지 않는 경우에는 스칼라 서브쿼리의 조인 조건에 인덱스가 존재하는지를 판단하고, 이 판단 결과, 인덱스가 존재하지 않는 경우에는 인덱스를 선정하여 데이터 액세스를 수행하고, 인덱스가 존재하는 경우에는 인덱스 검증에 따라 해당 인덱스 사용이 가능하면, 해당 인덱스를 그대로 사용하고, 해당 인덱스 사용이 불가능하면, 스칼라 서브 쿼리에 사용된 해당 테이블에 사용할 수 있는 다른 인덱스가 존재하는지를 판단하여 존재한 경우에는 상기 다른 인덱스를 사용하고, 사용 가능한 다른 인덱스가 존재하지 않는 경우에는 새로운 인덱스를 선정하여 데이터 액세스를 수행하고, In SQL, it is determined whether or not an inline view is used. If an inline view is not used, it is determined whether an index exists in the join condition of a scalar subquery. If the index does not exist, the index is selected to access the data. If the index exists, if the index can be used according to the index verification, the index is used as it is. If the index is not available, other indexes available for the table used in the scalar subquery are executed. It is determined whether or not the existence of the other index is used, and if there is no other available index, a new index is selected to perform data access, 상기 해당 SQL에서 인라인 뷰를 사용한 경우에는 인라인 뷰의 총건수가 결과 건수를 초과하는지를 판단하여, 초과한 경우에는 주 쿼리로 스칼라 서브쿼리를 이동한 후 상기 스칼라 서브쿼리의 조인 조건에 인덱스가 존재하는지를 판단하고, 상기 인라인 뷰의 총건수가 결과 건수 이하인 경우에는 바로 상기 스칼라 서브쿼리의 조인 조건에 인덱스가 존재하는지를 판단하며, 스칼라 서브쿼리의 인덱스가 선정된 후에 주 쿼리의 테이블에 인덱스를 선정하고,When the inline view is used in the corresponding SQL, it is determined whether the total number of inline views exceeds the number of results. If the number of inline views is exceeded, the scalar subquery is moved to the main query, and then it is determined whether an index exists in the join condition of the scalar subquery. If the total number of inline views is less than or equal to the number of results, determine whether an index exists in the join condition of the scalar subquery, select an index in the table of the main query after the index of the scalar subquery is selected, 상기 데이터 연결 방법이 스칼라 서브쿼리 방법에 의한 것인지를 판단한 결과, 스칼라 서브쿼리 방법에 의한 경우가 아닌 경우에는 데이터 연결 방법이 순환 전개 방법에 의한 것인지를 판단한 후 인덱스를 이용하여 데이터 액세스를 수행하는 것을 특징으로 하는 데이터베이스 액세스 방법.As a result of determining whether the data connection method is based on a scalar subquery method, if the data connection method is not based on a scalar subquery method, it is determined whether the data connection method is based on a circular expansion method and then performing data access using an index. Featured database access method. 청구항 4에 있어서,The method according to claim 4, 상기 데이터 연결 방법이 순환 전개 방법에 의한 것인지를 판단한 결과, 순환 전개 방법에 의한 경우에는, As a result of determining whether the data connection method is based on the circular expansion method, in the case of the circular expansion method, 해당 SQL이 순환 전개에서 최적화된 인덱스(CONNECT BY 절에 사용하는 Prior 절 반대편 컬럼에 존재하는 인덱스 또는 START With 절에 사용된 컬럼에 존재하는 인덱스)를 사용하고 있는지를 판단하여, 최적화된 인덱스를 사용하고 있지 않은 경우에는 인덱스를 선정하여 데이터 액세스를 수행하고, 최적화된 인덱스를 사용하고 있는 경우에는 인덱스 검증에 따라 해당 인덱스 사용이 가능하면, 해당 인덱스를 그대로 사용하고, 해당 인덱스 사용이 불가능하면, 해당 테이블에 사용할 수 있는 다른 인덱스의 존재 여부를 판단하여, 존재하면 다른 인덱스를 사용하고, 존재하지 않으면 새로운 인덱스를 선정하여 데이터 액세스를 수행하고, Use the optimized index by determining whether the SQL is using an optimized index (an index on the column opposite the Prior clause used in the CONNECT BY clause or an index on the column used in the START With clause) in a circular deployment. If not, perform the data access by selecting the index, and if the optimized index is used, if the index can be used according to the index verification, use the index as it is; if the index is not available, Determining whether there is another index available for the table, if it exists, use another index, if not, select a new index to perform data access, 상기 데이터 연결 방법이 순환 전개 방법에 의한 경우가 아닌 경우에는 데이터 연결 방법이 집합 연산자 방법에 의한 것인지를 판단한 후 데이터 액세스를 수행하는 것을 특징으로 하는 데이터베이스 액세스 방법.If the data connection method is not the case by the circular expansion method, it is determined whether the data connection method is by the set operator method, and then perform data access. 삭제delete 청구항 1 내지 청구항 3 중 어느 한 항에 있어서,The method according to any one of claims 1 to 3, 상기 처리 범위율이 인덱스 액세스 허용율을 초과하는지를 판단하여 인덱스를 이용하거나 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하는 단계는,Determining whether the processing range rate exceeds the index access allowance rate and performing data access using an index or a table full scan may include: 상기 처리 범위율이 인덱스 액세스 허용율을 초과하는 경우에는 테이블의 크기가 기준 크기를 초과하는지를 판단하여, 초과하는 경우에는 인덱스를 이용하거나 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하고, 테이블의 크기가 기준 크기 이하인 경우에는 인덱스를 이용하여 데이터 액세스를 수행하고,If the processing range rate exceeds the index access allowance rate, it is determined whether the size of the table exceeds the reference size. If the processing range rate is exceeded, data access is performed using an index or a table pull scan. If the size is smaller than the reference size, the data is accessed using the index. 상기 처리 범위율이 인덱스 액세스 허용율 이하인 경우에는 인덱스를 이용하여 데이터 액세스를 수행하는 것을 특징으로 하는 데이터베이스 액세스 방법.And if the processing range ratio is less than or equal to the index access allowance rate, perform data access using an index. 청구항 7에 있어서,The method of claim 7, 상기 테이블의 크기가 기준 크기를 초과하여 인덱스를 이용하거나 테이블 풀 스캔을 이용하여 데이터 액세스를 수행하는 과정은,The process of performing data access using an index or a table full scan when the size of the table exceeds a reference size may include: 추출 건수와 처리 범위가 동일한지를 판단하여, 동일한 경우에는 인덱스 스캔만으로 결과 추출이 가능한지를 판단하고, 이 판단 결과 가능한 경우에는 인덱스 검증에 따라 사용 가능한 인덱스이면 해당 인덱스를 이용하여 데이터 액세스를 수행하고, 사용 가능한 인덱스가 아니면 테이블 풀 스캔으로 데이터 액세스를 수행하고, 상기 인덱스 스캔만으로 결과 추출이 가능한지를 판단한 결과, 불가능한 경우에는 테이블 풀스캔을 이용하여 데이터 액세스를 수행하며,It is determined whether the number of extractions and the processing range are the same, and in the same case, it is determined whether the result extraction is possible only by the index scan.If the determination is possible, the data is accessed using the index if the index is available according to the index verification. If it is not an available index, data access is performed by a table full scan, and it is determined whether the result can be extracted only by the index scan. If not, data access is performed by using a table full scan. 상기 추출 건수와 처리 범위가 동일한지를 판단하여, 동일하지 않은 경우에는 추출 건수가 인덱스 액세스 허용율을 초과하는지를 판단하고, 이 판단 결과 초과하는 경우에는 상기 인덱스 스캔만으로 결과 추출이 가능한지를 판단하는 절차를 수행하고, 상기 추출 건수가 인덱스 액세스 허용율 이하인 경우에는 추출되는 데이터에 기준 데이터가 존재하는지를 판단하고, 이 판단 결과 기준 데이터가 존재하는 경우에는 상기 기준 데이터를 주 쿼리로 그룹 함수에 의해 감소하는 데이터를 스칼라 서브쿼리로 변경한 후 인덱스를 선정하여 데이터 액세스를 수행하고, 상기 기준 데이터가 존재하지 않은 경우에는 테이블 풀스캔을 이용하여 데이터 액세스를 수행하는 것을 특징으로 하는 데이터베이스 액세스 방법.Determining whether the number of extractions is equal to the processing range, and if it is not the same, determines whether the number of extractions exceeds the index access allowance rate. If the number of extractions exceeds the determination result, determining whether the result extraction is possible only by the index scan. If the extracted number is less than or equal to the index access rate, it is determined whether the reference data exists in the extracted data. If the reference data exists, the reference data is reduced as a main query by a group function. A method of accessing a database comprising changing a scalar subquery to select an index to perform data access, and performing data access using a table full scan when the reference data does not exist. 삭제delete 삭제delete
KR1020080039248A 2008-04-28 2008-04-28 database access method KR100956921B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020080039248A KR100956921B1 (en) 2008-04-28 2008-04-28 database access method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020080039248A KR100956921B1 (en) 2008-04-28 2008-04-28 database access method

Publications (2)

Publication Number Publication Date
KR20090113499A KR20090113499A (en) 2009-11-02
KR100956921B1 true KR100956921B1 (en) 2010-05-11

Family

ID=41554823

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020080039248A KR100956921B1 (en) 2008-04-28 2008-04-28 database access method

Country Status (1)

Country Link
KR (1) KR100956921B1 (en)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101432700B1 (en) * 2012-10-10 2014-08-25 (주)티베로 Method for optimizing query
KR101546333B1 (en) 2014-02-20 2015-08-25 주식회사 티맥스데이터 Apparatus for processing query in database with hybrid storages

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001022757A (en) 1999-07-05 2001-01-26 Nec Corp Device and method for relational database access
KR20010093777A (en) * 1998-10-16 2001-10-29 엘그레시 도론 Accessing a hierarchical data store through an sql input
KR20030087370A (en) * 2002-05-08 2003-11-14 삼성전자주식회사 XML indexing method for regular path expression queries in relational database and data structure thereof.
KR20070076154A (en) * 2006-01-18 2007-07-24 텔코웨어 주식회사 Apparatus for processing ldap queries for accessing a relational database and method thereof

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010093777A (en) * 1998-10-16 2001-10-29 엘그레시 도론 Accessing a hierarchical data store through an sql input
JP2001022757A (en) 1999-07-05 2001-01-26 Nec Corp Device and method for relational database access
KR20030087370A (en) * 2002-05-08 2003-11-14 삼성전자주식회사 XML indexing method for regular path expression queries in relational database and data structure thereof.
KR20070076154A (en) * 2006-01-18 2007-07-24 텔코웨어 주식회사 Apparatus for processing ldap queries for accessing a relational database and method thereof

Also Published As

Publication number Publication date
KR20090113499A (en) 2009-11-02

Similar Documents

Publication Publication Date Title
US10817514B2 (en) Splitting of a join operation to allow parallelization
US7461060B2 (en) Generalized partition pruning in a database system
US9886492B2 (en) Self-adjusting database-query optimizer
US7054852B1 (en) Performance of join operations in parallel database systems
US7617179B2 (en) System and methodology for cost-based subquery optimization using a left-deep tree join enumeration algorithm
US7184998B2 (en) System and methodology for generating bushy trees using a left-deep tree join enumeration algorithm
US7921102B2 (en) Maintained symbol table only index
US20090063527A1 (en) Processing of database statements with join predicates on range-partitioned tables
US7949655B2 (en) Joins of relations in an object relational database system
CN105247513A (en) System and method for distributed SQL join processing in shared-nothing relational database clusters using stationary tables
US9836505B2 (en) Star and snowflake join query performance
US20070271218A1 (en) Statistics collection using path-value pairs for relational databases
US9256643B2 (en) Technique for factoring uncertainty into cost-based query optimization
US6226639B1 (en) System and method for hybrid hash join using over-partitioning to respond to database query
KR100956921B1 (en) database access method
US20140181076A1 (en) Techniques for join processing on column partitioned tables
CN105335394B (en) A kind of data control method and system based on database
US7958160B2 (en) Executing filter subqueries using a parallel single cursor model
CN102136004A (en) Method for acquiring service from workflow system
US11620287B2 (en) Framework for providing intermediate aggregation operators in a query plan
WO2022026975A1 (en) Intermediate aggregation operators in a query plan
US7613682B2 (en) Statistics collection using path-identifiers for relational databases
US8972381B2 (en) Techniques for three-step join processing on column partitioned tables
El-Helw et al. Optimization of common table expressions in mpp database systems
US7814080B1 (en) Grouping database queries and/or transactions

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: 20130318

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140527

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150430

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20161026

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee