2011-08-18 17 views
0

爲了提高服務器性能,我決定使用內存表來加快讀取用戶的信息。從另一個MyISAM表自動加載MEMORY表

我的問題是:如何在服務器關閉後從另一個MyISAM表中自動加載MEMORY表?

我可以在每次我想在MEMORY中查找時檢查行數,然後逐行加載PHP腳本,但從MyISAM讀取2,000,000條記錄需要時間並保存在MEMORY中。並檢查行數。雖然它不是線程安全的,我應該照顧它。

有沒有更好的方法?

回答

0

最簡單的方法是修改啓動MySQL的任何腳本(mysqld_safe?)並讓它運行'mysql'來發出一個命令來運行存儲過程來執行表填充。我不相信MySQL有任何內部的東西可以在啓動時自動觸發,或者任何類型的內部作業調度器。

+0

感謝馬克,你能舉例說明? – Shila

+0

MySQL確實提供了一個事件調度器。請參閱:http://dev.mysql.com/doc/refman/5.6/en/server-options.html#option_mysqld_init-file –

0

我已經用下面的方法解決了這個問題。 1.在設置爲cron的php上創建一個腳本。版本 草案:

$connection = new PDO(....) 
$sql = "Select id from table_memory limit 1"; 
$result = $connection->query($sql)->fetchColumn(); 
if (!$result) { 
    $sql = "select * into outfile '/path' from main_table"; 
    $connection->exec($sql); 
    if (file_exists('/path')) { 
     $sql = "LOAD DATA INFILE '/path' INTO table_memory"; 
     $connection->exec($sql); 
    } 
} 

//最後的檢查,如果有必要,併發送郵件或其他通知

參考文獻: http://dev.mysql.com/doc/refman/5.0/en/load-data.html