【问题标题】:MySQL throwing incorrect key file error [duplicate]MySQL抛出不正确的密钥文件错误[重复]
【发布时间】:2015-10-30 15:30:13
【问题描述】:

我有一个庞大的数据库(每个表中包含近 200 000 行以及许多这样的表)。我必须对其进行查询。数据存储在 MySQL 中,我不能使用任何其他数据库。在我的查询中,我必须执行 UNION 的表。我的查询是这样的:

select * from table1 
UNION 
select * from table2
...
select * from tablen;

但是当我这样做时,我得到了这个错误

表'/tmp/#sql_d3d_0.MYI'的密钥文件不正确;尝试修复 它'

我认为这是因为加入了太多包含太多数据的表。如何优化我的查询,使其不会产生此问题并且查询变得更快?

【问题讨论】:

  • MySQL != Sql Server - 选择标签时请小心。
  • 查找表之间的关系并进行连接
  • 第一个建议是尽量避免使用select *。使用列名(即使是所有列名)使您的代码更易于理解和维护,并且有助于防止表结构发生变化时出现意外情况。
  • 你能用UNION ALL代替UNION吗?这样,服务器就不必对您的结果进行重复数据删除,这可能就是它试图将所有数据填充到临时表中的原因。如果您使用的是 v5.7.3 以上的 MySQL 服务器,UNION ALL definitely should be an improvement over UNION for temp table space。 (是否可以使用UNION ALL取决于您的实际数据以及您如何使用这些结果,因此只有您可以回答...)
  • (投票重新打开,因为在这种情况下,我认为 可以 为这个特定的查询模式做一些事情来避免使用临时空间。所有的答案重复似乎只是涉及使临时空间更大,而不是使查询结果不那么需要临时...)

标签: mysql sql database


【解决方案1】:

当您使用连接发出请求时,MySQL 会创建一个临时表来响应您的请求。您收到的错误意味着您的请求在服务器上非常困难。

也许可以扩大你的记忆,

  • wait_timeout = 600
  • max_allowed_pa​​cket = 64M

或简化您的请求。

【讨论】:

    猜你喜欢
    • 2013-09-30
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 2016-12-27
    • 2011-01-01
    • 2016-01-27
    相关资源
    最近更新 更多