程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MyISAM表的緩存

MyISAM表的緩存

編輯:MySQL綜合教程

MyISAM表的緩存   前言:   www.2cto.com   今天一個朋友問了一個問題,原文如下: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文件緩存搗的鬼。   www.2cto.com   驗證:   驗證方式其實很簡單,在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文件緩存中。這樣當某些用戶的數據第一次訪問時就不會出現慢查詢了  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved