13.7.6.5 LOAD INDEX INTO CACHE 구문
LOAD INDEX INTO CACHEtbl_index_list
[,tbl_index_list
] ...tbl_index_list
:tbl_name
[PARTITION (partition_list
| ALL)] [[INDEX|KEY] (index_name
[,index_name
] ...)] [IGNORE LEAVES]partition_list
:partition_name
[,partition_name
][, ...]
LOAD INDEX INTO CACHE
문은 명시적인 CACHE INDEX
문에 의해 할당 된 키 캐시 또는 그렇지 않으면 기본 키 캐시에 테이블 인덱스를 탑재합니다.
LOAD INDEX INTO CACHE
은 MyISAM
테이블에만 사용됩니다. MySQL 5.6에서는 분할 된 MyISAM
테이블에 대해서도 지원됩니다. 또한 분할 된 테이블의 인덱스를 하나 여러 또는 모든 파티션에 탑재 할 수 있습니다.
IGNORE LEAVES
수정 자에 따라 인덱스의 리프가 아닌 노드의 블록 만 탑재됩니다.
IGNORE LEAVES
는 분할 된 MyISAM
테이블에 대해서도 지원됩니다.
다음 문은 테이블 t1
과 t2
의 인덱스 노드 (인덱스 블록)를 탑재하고 있습니다.
mysql> LOAD INDEX INTO CACHE t1, t2 IGNORE LEAVES;
+---------+--------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+--------------+----------+----------+
| test.t1 | preload_keys | status | OK |
| test.t2 | preload_keys | status | OK |
+---------+--------------+----------+----------+
이 문은 t1
에서 모든 인덱스 블록을 탑재합니다. t2
에서 리프가 아닌 노드의 블록만을 탑재합니다.
LOAD INDEX INTO CACHE
구문은 테이블의 특정 인덱스만을 탑재하도록 지정할 수 있습니다. 현재 구현에서는 테이블의 모든 인덱스를 캐시에 미리로드하는 테이블 이름 이외의 것을 지정하는 이유는 아무것도 없습니다.
MySQL 5.6.11에서만이 문을 발행하기 전에 gtid_next
를 AUTOMATIC
으로 설정해야합니다. (Bug # 16062608, Bug # 16715809, Bug # 69045)
MySQL 5.6에서는 분할 된 MyISAM
테이블의 특정 파티션의 인덱스를 탑재 할 수 있습니다. 예를 들어, 다음 두 명령문은 처음이 분할 된 테이블 pt
파티션 p0
의 인덱스를 탑재하는 반면, 두 번째는 같은 테이블의 파티션 p1
과 p3
의 인덱스를 탑재합니다.
LOAD INDEX INTO CACHE pt PARTITION (p0); LOAD INDEX INTO CACHE pt PARTITION (p1, p3);
테이블 pt
의 모든 파티션의 인덱스를 탑재하려면 다음 두 문장 모두에서 사용할 수 있습니다.
LOAD INDEX INTO CACHE pt PARTITION (ALL); LOAD INDEX INTO CACHE pt;
지금 나와있는 두 개의 문은 같으며이 가운데 어느 쪽을 실행해도 효과는 동일합니다. 즉, 파티션 된 테이블의 모든 파티션의 인덱스를 탑재하는 경우 PARTITION (ALL)
어구는 옵션입니다.
여러 파티션의 인덱스를 탑재 할 경우 해당 파티션이 연속적 필요는없고, 그 이름을 특정 순서로 나열 할 필요도 없습니다.
LOAD INDEX INTO CACHE ... IGNORE LEAVES
테이블의 모든 인덱스 블록 크기가 동일하지 않으면 실패합니다. 테이블의 인덱스 블록 크기는 myisamchk -dv을 사용하고 Blocksize
컬럼을 선택하여 확인할 수 있습니다.