在MySQL文档意味着你可以指定一个或多个表的索引到一个名为关键字缓冲区(和预加载它们).手册中的语法定义是:
CACHE INDEX
tbl_index_list [, tbl_index_list] ...
IN key_cache_name
tbl_index_list:
tbl_name [[INDEX|KEY] (index_name[, index_name] ...)]
Run Code Online (Sandbox Code Playgroud)
这似乎说你可以只将一个表的索引分配给指定的密钥缓冲区.例如:
SET GLOBAL my_keys.key_buffer_size=512*1048576;
CACHE INDEX my_table KEY (PRIMARY) INTO my_keys;
LOAD INDEX INTO CACHE my_table KEY (PRIMARY);
Run Code Online (Sandbox Code Playgroud)
只加载my_table的PRIMARY索引.
但是从我所知道的情况来看,它至少不是这样,至少不是5.0.87.相反,服务器似乎加载了所有表的索引,实际上忽略了括号中的索引列表部分.
例如,我有一个大字典表:
CREATE TABLE dict (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(330) NOT NULL,
UNIQUE KEY (name) );
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试加载只是主索引,启动mysqld的由dict.MYI的大小(MB 733在我的例子),这比单独的主索引(103 MB)的大小布赫更大的内存增加驻留内存的大小.
更新2011-01-08:文档CACHE INDEX实际上提供了答案:
CACHE INDEX的语法使您可以指定只应将表中的特定索引分配给缓存.当前实现将所有表的索引分配给缓存,因此没有理由指定除表名之外的任何内容.
如果我能正确阅读我在OP中引用的文档,那么这一切都不会发生.
对于那些错过更新的人,FSB 对他自己的问题做出了回答。
CACHE INDEX 的语法使您能够指定仅应将表中的特定索引分配给缓存。当前的实现将表的所有索引分配给缓存,因此没有理由指定除表名以外的任何内容。
| 归档时间: |
|
| 查看次数: |
2327 次 |
| 最近记录: |