我有一個使用MySQL的電子商務應用程序,我希望它更快。當在之前訪問過的網站上訪問零件#時,零件會快速加載,因爲所有必要的數據都已存在於INNODB緩衝池中。但是,如果零件#以前從未裝入,那麼該數據尚未存入緩衝池,因此需要從磁盤讀取數據,速度很慢。我將INNODB緩衝池設置爲2GB,而整個數據庫只有大約350MB,因此有足夠的空間將整個數據庫加載到緩衝池中。我可以從INNODB統計數據中看到,現在只有大約一半的緩衝池被使用。如何使用MySQL將表預載入INNODB緩衝池?
我發現了預加載數據的參考,也稱爲「預熱」緩衝池,如Quickly preloading Innodb tables in the buffer pool或mysqldump.azundris.com/archives/70-Innodb-cache-preloading-using-blackhole html的。該策略基本上涉及在每個表上強制進行表掃描,因爲MySQL沒有用於預加載數據的本地方式。
我不想手動創建一個列出數據庫中每個表的腳本,並且必須執行此操作。我如何創建一個腳本並自動爲每個表執行選擇,並自動選取一個非索引列,以便執行表掃描?
這個算法簡潔明快。這將緩存innodb數據。我不確定是否會緩存所有innodb索引頁面,但是您的算法可以快速應用於此。我相信MyISAM只緩存MYI索引頁面。同樣,你的算法構成了通過表和索引的基礎。布拉沃(和+1)!!!! – RolandoMySQLDBA 2011-03-29 20:38:16
我只是實現獲取查詢列表。這個想法來自問題中鏈接的Mysql性能博客。 – Mchl 2011-04-11 13:26:14