13.7.6.2 CACHE INDEX 구문
CACHE INDEXtbl_index_list
[,tbl_index_list
] ... [PARTITION (partition_list
| ALL)] INkey_cache_name
tbl_index_list
:tbl_name
[[INDEX|KEY] (index_name
[,index_name
] ...)]partition_list
:partition_name
[,partition_name
][, ...]
CACHE INDEX
문은 테이블 인덱스를 특정 키 캐시에 할당합니다. 이것은 MyISAM
테이블에만 사용됩니다. 인덱스가 할당되면 이러한 인덱스를 필요에 따라 LOAD INDEX INTO CACHE
캐시에 미리로드 할 수 있습니다.
다음 문은 테이블 t1
, t2
및 t3
의 인덱스를 hot_cache
라는 이름의 키 캐시에 할당합니다.
mysql> CACHE INDEX t1, t2, t3 IN hot_cache;
+---------+--------------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+--------------------+----------+----------+
| test.t1 | assign_to_keycache | status | OK |
| test.t2 | assign_to_keycache | status | OK |
| test.t3 | assign_to_keycache | status | OK |
+---------+--------------------+----------+----------+
CACHE INDEX
구문은 테이블의 특정 인덱스 만 캐시에 할당하도록 지정할 수 있습니다. 현재 구현에서는 테이블의 모든 인덱스를 캐시에 할당 테이블 이름 이외의 것을 지정하는 이유는 아무것도 없습니다.
CACHE INDEX
문에서 참조되는 키 캐시는 파라미터 설정 명령을 사용하여 또는 서버의 매개 변수 설정에서 크기를 설정하여 만들 수 있습니다. 예 :
mysql> SET GLOBAL keycache1.key_buffer_size=128*1024;
키 캐시 매개 변수는 구조화 된 시스템 변수의 멤버로 액세스 할 수 있습니다. 섹션 5.1.5.1 "구조 시스템 변수" 를 참조하십시오.
인덱스 키 캐시에 할당하려면 해당 키 캐시가 존재해야합니다.
mysql> CACHE INDEX t1 IN non_existent_cache;
ERROR 1284 (HY000) : Unknown key cache 'non_existent_cache'
기본적으로 테이블 인덱스는 서버 시작시에 생성되는 메인 (디폴트) 키 캐시에 할당됩니다. 키 캐시가 파기되면 그에 할당 된 모든 인덱스는 기본 키 캐시에 다시 할당됩니다.
인덱스 할당은 서버에 전체적으로 영향을 미칩니다. 클라이언트가 인덱스를 특정 캐시에 할당하면 어떤 클라이언트가 쿼리를 발행했는지에 관계없이이 캐시는 그 인덱스에 관련된 모든 쿼리에 사용됩니다.
MySQL 5.6에서는이 문은 분할 된 MyISAM
테이블에 대해서도 지원됩니다. 하나, 여러 또는 모든 파티션 하나 이상의 인덱스를 특정 키 캐시에 할당 할 수 있습니다. 예를 들어, 다음 문을 실행할 수 있습니다.
CREATE TABLE pt (c1 INT, c2 VARCHAR (50), INDEX i (c1)) PARTITION BY HASH (c1) PARTITIONS 4; SET GLOBAL kc_fast.key_buffer_size = 128 * 1024; SET GLOBAL kc_slow.key_buffer_size = 128 * 1024; CACHE INDEX pt PARTITION (p0) IN kc_fast; CACHE INDEX pt PARTITION (p1, p3) IN kc_slow;
이전 일련의 명령문은 다음 작업을 수행합니다.
4 개의 파티션을 포함하는 파티션 된 테이블을 만듭니다. 이러한 파티션은 자동으로
p0
, ...,p3
라는 이름을 붙일 수 있습니다. 이 테이블에는 컬럼c1
에i
라는 인덱스가 포함되어 있습니다.kc_fast
과kc_slow
라는 두 개의 키 캐시를 만듭니다.파티션
p0
의 인덱스를kc_fast
키 캐시 파티션p1
과p3
의 인덱스를kc_slow
키 캐시에 할당합니다. 나머지 파티션 (p2
)의 인덱스 서버의 기본 키 캐시를 사용합니다.
대신 테이블 pt
의 모든 파티션의 인덱스를 kc_all
라는 하나의 키 캐시에 할당하려면 다음 두 문장 모두에서 사용할 수 있습니다.
CACHE INDEX pt PARTITION (ALL) IN kc_all; CACHE INDEX pt IN kc_all;
지금 나와있는 두 개의 문은 같으며이 가운데 어느 쪽을 실행해도 효과는 동일합니다. 즉, 파티션 된 테이블의 모든 파티션의 인덱스를 동일한 키 캐시에 할당하는 경우 PARTITION (ALL)
어구는 옵션입니다.
여러 파티션 인덱스 키 캐시에 할당하면 해당 파티션이 연속적 필요는없고, 그 이름을 특정 순서로 나열 할 필요도 없습니다. 키 캐시에 명시 적으로 할당되지 않은 파티션의 인덱스는 자동으로 서버의 기본 키 캐시를 사용합니다.
MySQL 5.6에서는 인덱스의 탑재도 분할 된 MyISAM
테이블에 대해 지원됩니다. 자세한 내용은 섹션 13.7.6.5 "LOAD INDEX INTO CACHE 구문" 을 참조하십시오.
MySQL 5.6.11에서만이 문을 발행하기 전에 gtid_next
를 AUTOMATIC
으로 설정해야합니다. (Bug # 16062608, Bug # 16715809, Bug # 69045)