我不经常来这里寻求帮助,但我对此感到非常沮丧,我希望有人以前遇到过。
每当我尝试使用多个连接从表中获取记录时,我都会收到此错误:
#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 条记录),但我怀疑这与它有什么关系。
任何帮助将非常感激。
更新:经过一些进一步的测试,似乎只有当我尝试订购结果时才会发生错误。也就是说,这个查询会给我我所期望的:
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 阻塞,如本文所述。我仍然不确定解决方案是什么,虽然......