Loading...
MySQL 9.5 Reference Manual 9.5의 15.2.5 HANDLER Statement의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
1HANDLER tbl_name OPEN [ [AS] alias] 2 3HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...) 4 [ WHERE where_condition ] [LIMIT ... ] 5HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST } 6 [ WHERE where_condition ] [LIMIT ... ] 7HANDLER tbl_name READ { FIRST | NEXT } 8 [ WHERE where_condition ] [LIMIT ... ] 9 10HANDLER tbl_name CLOSE
HANDLER statement는 테이블 스토리지 엔진 인터페이스에 대한 직접적인 접근을 제공합니다. 이는 InnoDB 및 MyISAM 테이블에서 사용할 수 있습니다.
HANDLER ... OPEN statement는 테이블을 열어 이후의 HANDLER ... READ statement를 사용하여 접근할 수 있게 만듭니다. 이 테이블 오브젝트는 다른 세션과 공유되지 않으며, 세션이 HANDLER ... CLOSE를 호출하거나 세션이 종료될 때까지 닫히지 않습니다.
테이블을 별칭을 사용하여 여는 경우, 열린 테이블에 대한 이후의 다른 HANDLER statement 참조에서는 테이블 이름이 아닌 별칭을 사용해야 합니다. 별칭을 사용하지 않고 데이터베이스 이름이 포함된 테이블 이름으로 테이블을 여는 경우, 이후의 참조에서는 데이터베이스 이름이 없는 테이블 이름을 사용해야 합니다. 예를 들어, mydb.mytable로 테이블을 연 경우, 이후의 참조에서는 mytable을 사용해야 합니다.
첫 번째 HANDLER ... READ 구문은 지정된 인덱스가 주어진 값들을 만족하고 WHERE 조건이 충족되는 행을 가져옵니다. 멀티컬럼 인덱스가 있는 경우, 인덱스 컬럼 값들을 쉼표로 구분된 목록으로 지정합니다. 인덱스의 모든 컬럼에 대한 값을 지정하거나, 인덱스 컬럼의 가장 왼쪽 프리픽스에 대한 값들을 지정해야 합니다. 예를 들어, 인덱스 my_idx에 순서대로 col_a, col_b, col_c라는 세 개의 컬럼이 포함되어 있다고 가정합니다. HANDLER statement는 인덱스의 세 컬럼 모두에 대한 값 또는 왼쪽 프리픽스에 해당하는 컬럼들에 대한 값만 지정할 수 있습니다. 예를 들면 다음과 같습니다:
1HANDLER ... READ my_idx = (col_a_val,col_b_val,col_c_val) ... 2HANDLER ... READ my_idx = (col_a_val,col_b_val) ... 3HANDLER ... READ my_idx = (col_a_val) ...
테이블의 PRIMARY KEY를 참조하기 위해 HANDLER 인터페이스를 사용하려면, 따옴표로 감싼 식별자인 PRIMARY를 사용합니다:
1HANDLER tbl_name READ `PRIMARY` ...
두 번째 HANDLER ... READ 구문은 WHERE 조건과 일치하는 행을 인덱스 순서대로 테이블에서 가져옵니다.
세 번째 HANDLER ... READ 구문은 WHERE 조건과 일치하는 행을 자연 행 순서로 테이블에서 가져옵니다. 이는 전체 테이블 스캔이 필요한 경우 HANDLER tbl_name READ index_name보다 더 빠릅니다. 자연 행 순서는 행이 MyISAM 테이블 데이터 파일에 저장되는 순서입니다. 이 statement는 InnoDB 테이블에서도 작동하지만, 따로 데이터 파일이 없기 때문에 이러한 개념은 존재하지 않습니다.
LIMIT 절이 없으면, 모든 형태의 HANDLER ... READ는 사용 가능한 경우 단일 행만 가져옵니다. 특정 개수의 행을 반환하려면 LIMIT 절을 포함합니다. 해당 구문은 SELECT statement와 동일한 구문을 사용합니다. Section 15.2.13, “SELECT Statement”를 참조하십시오.
HANDLER ... CLOSE는 HANDLER ... OPEN으로 열린 테이블을 닫습니다.
일반적인 SELECT statement 대신 HANDLER 인터페이스를 사용해야 하는 이유는 여러 가지가 있습니다:
HANDLER는 SELECT보다 빠릅니다:
HANDLER는 로우레벨 ISAM 유사 인터페이스를 사용하는 애플리케이션을 MySQL로 포팅하기 쉽게 해줍니다.
HANDLER는 SELECT로는 수행하기 어렵거나(또는 불가능하기까지 한) 방식으로 데이터베이스를 순회할 수 있게 해줍니다. HANDLER 인터페이스는 데이터베이스에 대한 인터랙티브 사용자 인터페이스를 제공하는 애플리케이션으로 작업할 때 데이터를 살펴보는 더 자연스러운 방법입니다.
HANDLER는 다소 로우레벨 statement입니다. 예를 들어, 이는 일관성을 제공하지 않습니다. 즉, HANDLER ... OPEN은 테이블의 스냅샷을 생성하지 않으며, 테이블을 락하지도 않습니다. 이는 HANDLER ... OPEN statement가 실행된 이후에 테이블 데이터가(현재 세션 또는 다른 세션에 의해) 수정될 수 있으며, 이러한 수정 사항은 HANDLER ... NEXT 또는 HANDLER ... PREV 스캔에서 부분적으로만 보일 수 있음을 의미합니다.
open 핸들러는 닫혔다가 다시 열리도록 표시될 수 있으며, 이 경우 핸들러는 테이블 내 위치를 잃게 됩니다. 이는 다음 두 가지 상황이 모두 참일 때 발생합니다:
어떤 세션이든 핸들러의 테이블에 대해 FLUSH TABLES 또는 DDL statement를 실행한 경우.
핸들러가 open 상태인 세션이 테이블을 사용하는 non-HANDLER statement를 실행한 경우.
테이블에 대해 TRUNCATE TABLE을 실행하면, HANDLER OPEN으로 열린 해당 테이블에 대한 모든 핸들러가 닫힙니다.
HANDLER로 열린 테이블에 대해 FLUSH TABLES tbl_name WITH READ LOCK이 실행되면, 핸들러는 암묵적으로 flush되고 테이블 내 위치를 잃게 됩니다.
15.2.4 EXCEPT Clause
15.2.6 IMPORT TABLE Statement