mysql临时表 内存表_最优MySQL临时表(内存表)配置?

EXPLAIN报告中的“使用临时”并不告诉我们临时表在磁盘上.它只告诉我们查询期望创建临时表.

如果临时表的大小小于tmp_table_size且小于max_heap_table_size,则临时表将保留在内存中.

Max_heap_table_size是MEMORY存储引擎中可以存在的最大表,无论该表是临时表还是非临时表.

Tmp_table_size是查询自动创建的表中最大的表.但无论如何,这不能大于max_heap_table_size.因此将tmp_table_size设置为大于max_heap_table_size没有任何好处.将这两个配置变量设置为相同的值是很常见的.

您可以监视创建的临时表的数量,以及磁盘上的数量,如下所示:

mysql> show global status like 'Created%';

+-------------------------+-------+

| Variable_name | Value |

+-------------------------+-------+

| Created_tmp_disk_tables | 20 |

| Created_tmp_files | 6 |

| Created_tmp_tables | 43 |

+-------------------------+-------+

请注意,在此示例中,创建了43个临时表,但其中只有20个在磁盘上.

增加tmp_table_size和max_heap_table_size的限制时,允许更大的临时表存在于内存中.

你可能会问,你需要多大的力量?您不一定需要使其足够大,以使每个临时表适合内存.您可能希望95%的临时表适合内存,只有剩余的稀有表位于磁盘上.那些最后5%可能非常大 – 比你想要使用的内存量大得多.

所以我的做法是保守地增加tmp_table_size和max_heap_table_size.然后观察Created_tmp_disk_tables与Created_tmp_tables的比例,看看我是否达到了让95%的人留在记忆中的目标(或者我想看的任何比例).

不幸的是,MySQL没有一个很好的方法来告诉你临时表的大小.这将因每个查询而异,因此状态变量无法显示,它们只能显示已发生的次数.并且EXPLAIN实际上并不执行查询,因此无法准确预测它将匹配多少数据.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值