从另一个MyISAM表中自动加载MEMORY表

问题描述 投票:0回答:3

为了提高服务器性能,我决定使用内存表来更快地读取用户的信息。

我的问题是:如何在服务器关闭后从另一个MyISAM表自动加载MEMORY表?

我可以在每次想要在MEMORY中查找时检查行数,然后通过PHP脚本逐行加载,但是从MyISAM读取2,000,000条记录并保存在MEMORY中需要时间。并检查行数。虽然它不是线程安全的,我应该照顾它。

有没有更好的方法?

php mysql performance memory autoload
3个回答
0
投票

最简单的方法是修改启动MySQL的任何脚本(mysqld_safe?)并让它运行'mysql'来发出命令来运行存储的proc,它会填充你的表。我不认为MySQL内部有任何可以在启动时自动触发的内容,或者任何类型的内部作业调度程序。


0
投票

我已通过以下方式解决了这个问题。 1.在php上创建一个设置为cron的脚本。草稿版本:

$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


0
投票

您似乎还可以使用init_file选项将MySQL配置为在启动时自动运行某些语句:

http://dev.mysql.com/doc/refman/5.6/en/server-options.html#option_mysqld_init-file

您可以告诉它运行填充内存表的文件。

另一个考虑因素,如果您需要偶尔更新内存表,则使用事件:

http://dev.mysql.com/doc/refman/5.6/en/create-event.html

© www.soinside.com 2019 - 2024. All rights reserved.