mysql key block size_mysql优化之索引优化

LOAD CACHE INTO CACHE

MySQL可以把索引文件预先加载到指定的缓存中:

LOAD INDEX INTO CACHE table_name;

LOAD INDEX INTO CACHE table_name INDEX (index_name_1, index_name_2);

LOAD INDEX INTO CACHE table_name INDEX (index_name_1, index_name_2) IGNORE LEAVES;

对于查询型的超大型的表,当没有足够的内存时,可以使用 IGNORE LEAVES 的方式加载索引到缓存。比如一个接近1Billion的数据表,其索引可能也是几G大小的。下面这个例子就显示了当预先加载数据索引时,查询的速度变化,这个数据表有接近1亿条记录,3个索引,有超过3G的大小,对于同一个查询:

#mysql> select * from tbigdatatable where username in (‘ABCDEF’, ‘19740821’)

在非预先加载索引以及预载索引的情况下,查询的响应区别:

#mysqld_safe –key-buffer-cache=1073741824

####不预载索引#### 5 rows in set (0.65 sec)

######预载索引#### 5 rows in set (1.94 sec)

当然一个查询有很大的偶然性,不过从一个大量的查询平均来看,这个效果还是有很大的差别的。

如果一个表的索引包含不同的key_block_size,那么这个预装载将会遇到困难, 如:

alter table tbigdatatable add index idx_bigdatatable_username(username) key_block_size=8192, add index idx_bigdatatable_email(email) key_block_size=8192, add index idx_bigdatatable_id(id) key_block_size=1024;

load index into cache tbigdatatable index (idx_bigdatatable_username, idx_bigdatatable_email) ignore leaves;

+————————+————–+———-+————————————-+

| Table | Op | Msg_type | Msg_text |

+————————+————–+———-+————————————-+

| coredata.tbigdatatable | preload_keys | error | Indexes use different block sizes |

| coredata.tbigdatatable | preload_keys | error | Subpartition p178sp0 returned error |

| coredata.tbigdatatable | preload_keys | status | Operation failed |

+————————+————–+———-+————————————-+

因为.MYI中包含不同block_size的索引,所以无法预加载!

MySQL 5.1 对分区表不能预装载索引:

preload_keys | note | The storage engine for the table doesn’t support preload_keys

真是不幸, 这些版本包括: 5.1.47, 5.1.61-community-log

因为手头上没有MySQL5.5的数据库可供使用,所以关于预装载索引到内存的方法只能暂时放一放,这也导致了我的另外一个测试项目差点夭折:9千万数据的分区表查询,每个查询要耗时1m左右,伤不起啊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值