从另一个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 在从另一个表中选择时插入到具有自动增量的表中

mysql中myisam,innodb和memory三个存储引擎的区别

如何将自动填充的表单记录(从另一条记录创建)添加到访问表中?

在 ms Access 数据宏中从另一个表中获取数据

Laravel错误将数据从另一个表插入到表中