我不经常来这里寻求帮助,但我对此感到非常沮丧,我希望有人以前遇到过这种情况。
每当我尝试使用多个连接从表中获取记录时,我都会收到此错误:
#126 - Incorrect key file for table '/tmp/#sql_64d_0.MYI'; try to repair it
所以这个查询会产生错误:
SELECT * FROM `core_username`
INNER JOIN `core_person` ON (`core_username`.`person_id` = `core_person`.`id`)
INNER JOIN `core_site` ON (`core_username`.`site_id` = `core_site`.`id`)
ORDER BY `core_username`.`name` ASC LIMIT 1
但这个不会:
SELECT * FROM `core_username`
INNER JOIN `core_person` ON (`core_username`.`person_id` = `core_person`.`id`)
ORDER BY `core_username`.`name` ASC LIMIT 1
这个也不会:
SELECT * FROM `core_username`
INNER JOIN `core_site` ON (`core_username`.`site_id` = `core_site`.`id`)
ORDER BY `core_username`.`name` ASC LIMIT 1
可能是什么原因造成的?我真的不知道如何修复 tmp 表,但我真的不认为这是问题所在,因为它每次都是一个新的 tmp 表。用户名表相当大(现在有 233,718 条记录),但我怀疑这与它有什么关系。
任何帮助将非常感激。
UPDATE:经过一些进一步的测试,似乎只有当我尝试订购结果时才会发生错误。也就是说,这个查询将给出我所期望的:
SELECT * FROM `core_username`
INNER JOIN `core_person` ON (`core_username`.`person_id` = `core_person`.`id`)
INNER JOIN `core_site` ON (`core_username`.`site_id` = `core_site`.`id`)
LIMIT 1
但如果我添加:
ORDER BY `core_username`.`name` ASC
错误被触发。这仅发生在我当前使用的特定网络服务器上。如果我下载数据库并在本地主机和其他服务器上尝试相同的操作,它运行良好。 MySQL版本是5.0.77。
知道这一点后,我相当有信心正在发生的事情是正在创建的 tmp 表太大并且 MySQL 阻塞了如这篇博文中所述。我仍然不确定解决方案是什么,但......