同时创建多个mysql临时表是不是很糟糕?

Goo*_*bot 8 mysql memory mysql-5.5 temporary-tables

我需要进行大量的统计分析才能向用户提供一些数据。目前,我从 mysql 捕获数据并通过PHP数组处理它们。但是,mysql 临时表要好得多(比 PHP 数组效率更高、速度更快;显然是由于它们的机制)。

我的暂定解决方案是在每次请求(即连接)时形成一个临时表来导入和处理数据。但是,我不确定同时创建多个临时表是否有缺点?

这会给mysql服务器带来问题吗?或者我可以在众多同时请求中使用它作为 PHP 数组的替代方案?

Rol*_*DBA 6

您想尽可能避免制作临时表:防止复制到临时表 (sql)

它们在 MySQL 复制中不能很好地工作:如何为 MySQL 临时表更新二进制日志?

由于临时表是 DB 世界中的事实,您可能必须进行一些非正统的更改以适应它们的存在。

通常,mysqld 习惯将 tmp 表放置/tmptmpdir配置的位置或任何位置。那通常是在一些毫无戒心的糟糕磁盘上。

一个有趣的替代方法是设置一个 RAM 磁盘并重新配置tmpdir以使用它

步骤 01:为 RAM 磁盘创建挂载点

mkdir /var/tmpfs
Run Code Online (Sandbox Code Playgroud)

步骤 02:将 RAM 磁盘添加到 /etc/fstab (16GB)

echo "none   /var/tmpfs              tmpfs   defaults,size=16g        1 2" >> /etc/fstab
Run Code Online (Sandbox Code Playgroud)

步骤 03:将此行添加到 /etc/my.cnf

[mysqld]
tmpdir=/var/tmpfs
Run Code Online (Sandbox Code Playgroud)

步骤 04:启用 RAM 盘

您可以执行以下操作之一:

  1. 只需重新启动数据库服务器
  2. mount -t tmpfs -o size=16g none /var/tmpfs

在执行此操作之前,请确保您有足够的 RAM

试一试 !!!

  • _Implicit_ 临时表对复制没有影响,无论是 SBR 还是 RBR。_Explicit_ 临时表通过线路发送所有 DDL。 (2认同)