13.2.4 HANDLER 구문
HANDLERtbl_name
OPEN [ [AS]alias
] HANDLERtbl_name
READindex_name
{ = | <= | >= | < | > } (value1
,value2
,...) [ WHEREwhere_condition
] [LIMIT ... ] HANDLERtbl_name
READindex_name
{ FIRST | NEXT | PREV | LAST } [ WHEREwhere_condition
] [LIMIT ... ] HANDLERtbl_name
READ { FIRST | NEXT } [ WHEREwhere_condition
] [LIMIT ... ] HANDLERtbl_name
CLOSE
HANDLER
문은 테이블 스토리지 엔진 인터페이스에 직접 액세스를 제공합니다. 이것은 InnoDB
및 MyISAM
테이블에 사용할 수 있습니다.
HANDLER ... OPEN
문은 테이블을 열고 그것을 이후의 HANDLER ... READ
문을 사용하여 액세스 할 수 있도록합니다. 이 테이블 오브젝트는 다른 세션에 의해 공유되어 있지 않고,이 세션이 HANDLER ... CLOSE
를 호출하거나 세션이 끝날 때까지 청산되지 않습니다. 별칭을 사용하여 테이블을 열면 그 열린 테이블에 다른 HANDLER
문을 사용하여 나중에 참조 테이블 이름 대신 별칭을 사용해야합니다.
첫 번째 HANDLER ... READ
구문은 지정된 인덱스가 특정 값을 충족하며 WHERE
조건이 충족 된 행을 가져옵니다. 멀티 컬럼 인덱스가 있으면 인덱스 컬럼 값을 쉼표로 구분 된 목록으로 지정할 수 있습니다. 인덱스의 모든 컬럼의 값을 지정하거나 인덱스 컬럼의 좌단의 프리픽스의 값을 지정합니다. 인덱스 my_idx
에 col_a
, col_b
및 col_c
라는 3 개의 컬럼이 그 순서로 포함되어 있다고합니다. HANDLER
문은 인덱스의 3 개 모든 컬럼 또는 왼쪽의 프리픽스의 컬럼의 값을 지정할 수 있습니다. 예 :
HANDLER ... READ my_idx = (col_a_val, col_b_val, col_c_val) ... HANDLER ... READ my_idx = (col_a_val, col_b_val) ... HANDLER ... READ my_idx = (col_a_val) ...
HANDLER
인터페이스를 사용하여 테이블의 PRIMARY KEY
를 참조하려면 따옴표 붙은 식별자 `PRIMARY`
을 사용합니다.
HANDLER tbl_name
READ`PRIMARY` ...
두 번째 HANDLER ... READ
구문은 WHERE
조건에 일치하는 인덱스 순서로 테이블 행을 가져옵니다.
세 번째 HANDLER ... READ
구문은 WHERE
조건에 일치하는 자연적인 행 순서로 테이블 행을 가져옵니다. 이것은 풀 테이블 스캔이 원할 경우 HANDLER
더 빠릅니다. 자연 행 순서는 행이 tbl_name
READ index_name
MyISAM
테이블 데이터 파일에 저장되는 순서입니다. 이 문은 InnoDB
테이블에서도되지만 개별 데이터 파일이 존재하지 않기 때문에이 같은 개념은 없습니다.
LIMIT
절을 사용하지 않으면 모든 형식의 HANDLER ... READ
가 단일 행 (사용 가능한 경우)를 가져옵니다. 특정 행 수를 반환하려면 LIMIT
절을 포함합니다. 그 구문은 SELECT
문의 경우와 동일합니다. 섹션 13.2.9 "SELECT 구문" 을 참조하십시오.
HANDLER ... CLOSE
은 HANDLER ... OPEN
오픈 된 테이블을 닫습니다.
일반 SELECT
문 대신 HANDLER
인터페이스를 사용하는 이유는 다음의 몇 가지가 있습니다.
HANDLER
는SELECT
보다 빠릅니다.HANDLER ... OPEN
대해 지정된 스토리지 엔진 핸들러 객체가 할당됩니다. 이 개체는 테이블에 대한 이후의HANDLER
문에 재사용됩니다. 문마다 다시 초기화 할 필요가 없습니다.관련 해석이 적습니다.
최적화 또는 쿼리 체크의 오버 헤드가 없습니다.
핸들러 인터페이스 (예 : 더티 읽기 가 허용되는 것과 같은) 데이터의 일관된 모양을 제공 할 필요가 없기 때문에 스토리지 엔진은
SELECT
이 일반적으로 허용하지 않는 최적화를 사용할 수 있습니다.
HANDLER
하여ISAM
비슷한 낮은 수준의 인터페이스를 사용하는 MySQL 애플리케이션에 이식이 용이합니다. (키 값 저장 패러다임을 사용하는 응용 프로그램을 적응시키기위한 대안은 섹션 14.18 "InnoDB 및 memcached의 통합" 을 참조하십시오.)HANDLER
를 사용하면SELECT
에서는 실현이 어려운 (또는 불가능 마저있다) 방법으로 데이터베이스를 추적 할 수 있습니다.HANDLER
인터페이스는 데이터베이스에 대화 형 사용자 인터페이스를 제공하는 응용 프로그램 작업시 데이터를 조사하기위한 더 자연스러운 방법입니다.
HANDLER
는 다소 낮은 수준의 문입니다. 예를 들어, 일관성이 제공되지 않습니다. 즉, HANDLER ... OPEN
은 테이블의 스냅 샷을 만들지 않고 테이블 잠금도하지 않습니다. 이것은 HANDLER ... OPEN
문이 발행 된 후 테이블 데이터를 (현재 세션 또는 다른 세션에서) 변경할 수 있으며, 이러한 변화가 HANDLER ... NEXT
또는 HANDLER ... PREV
스캔 에 부분적으로 표시되지 않을 수 있음을 나타냅니다.
열린 핸들러를 닫고 다시 열도록 표시 할 수 있습니다. 그 경우,이 핸들러는 테이블의 위치를 잃게됩니다. 이것은 다음의 두 경우에 해당하는 경우 발생합니다.
이 핸들러의 테이블에 하나의 세션이
FLUSH TABLES
또는 DDL 문을 실행하고있다.이 핸들러를 열려있는 세션이 테이블을 사용하는
HANDLER
이외의 문을 실행하고있다.
테이블에 TRUNCATE TABLE
은 HANDLER OPEN
에서 열린 테이블의 모든 핸들러를 닫습니다.
FLUSH TABLES
에서 플래시 된 테이블이 tbl_name
WITH READ LOCKHANDLER
에서 열린 경우, 그 핸들러는 암묵적으로 플래시되어 그 위치를 잃게됩니다.
HANDLER
는 파티션 된 테이블에서 지원되지 않습니다.