从另一个MyISAM表中自动加载MEMORY表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从另一个MyISAM表中自动加载MEMORY表相关的知识,希望对你有一定的参考价值。
为了提高服务器性能,我决定使用内存表来更快地读取用户的信息。
我的问题是:如何在服务器关闭后从另一个MyISAM表自动加载MEMORY表?
我可以在每次想要在MEMORY中查找时检查行数,然后通过php脚本逐行加载,但是从MyISAM读取2,000,000条记录并保存在MEMORY中需要时间。并检查行数。虽然它不是线程安全的,我应该照顾它。
有没有更好的方法?
最简单的方法是修改启动mysql的任何脚本(mysqld_safe?)并让它运行'mysql'来发出命令来运行存储的proc,它会填充你的表。我不认为MySQL内部有任何可以在启动时自动触发的内容,或者任何类型的内部作业调度程序。
我已通过以下方式解决了这个问题。 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
您似乎还可以使用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
以上是关于从另一个MyISAM表中自动加载MEMORY表的主要内容,如果未能解决你的问题,请参考以下文章
mysql中myisam,innodb和memory三个存储引擎的区别