文件缓存MyISAM表的缓存

发一下牢骚和主题无关:

    

    媒介:

    天今一个友人问了一个题问,原文如下:mysql5.1,myisam的表,select count(*) as total FROM m_bff WHERE from_uid='73149293' AND isdeleted=0。from_uid上有索引,第一次执行这个句子速度慢,1秒多,用show profile看都慢在Sending data上。但是紧接着我加上sql_no_cache,执行只需要0.01秒了,有很多多少句子都是类似的情况第一次慢,后来加上sql_no_cache也不慢,Key_blocks_unused也很多,请教下这类是什么因原呢?

    

 

    题问总结一下就是:对于MyISAM表的查询,为何第一次会比第二次慢非常多?

    想回innodb和MyISAM的别区,其中非常重要的一个就是MyISAM只缓存索引容内,而innodb不仅缓存索引还缓存据数。那照理说MyISAM每次的据数查询都应该是Disk Access不会有很大的速度差距吧。

    其实在MyISAM的文件和操作系统之间还有一层OS别级的文件缓存。测猜就是OS文件缓存捣的鬼。

    每日一道理
宽容,是一种坦荡,可以无私无畏,无拘无束,无尘无染。宽容,是一种豁达,是比海洋和天空更为博大的胸襟,是宽广和宽厚的叠加,延续和升华。宽容有度,宽容无价,宽以待人,这是人生处世的基本法则。

    

    证验:

    证验方法其实很简单,在shell下以root权限运行 cat 3 > /proc/sys/vm/drop_caches 把OS的文件缓存清空,再运行SQL看看是否是和第一次运行的速度一样以可就知道了。

    

 

    

    结果:

    恩,echo 3 /proc/sys/vm/drop_caches 后之就又慢了,看来就是你说的题问了

    

 

    

    申引:

    知道了MyISAM这个特性后,可以用文件预读的方法来做据数预热。

    假设某个表是热门表,且操作系统又有较多的内存空余。我们可以用cat table.MYD >> /dev/null 的方法来把文件加载到OS文件缓存中。这样当某些户用的据数第一次拜访时就不会现出慢查询了

    

 

 

 

 

文章结束给大家分享下程序员的一些笑话语录: 看新闻说中国输入法全球第一!领先了又如何?西方文字根本不需要输入法。一点可比性都没有。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值