我不经常来这里寻求帮助,但是我对此感到非常沮丧,并希望有人曾经遇到过这个问题。
每当我尝试使用多个连接从表中获取记录时,就会出现以下错误:
#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
这可能是什么原因?我不知道如何修复临时表,但我认为问题不在于它,因为每次都是新的临时表。用户名表相当大(现在有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
出现了错误。这只发生在我当前使用的特定 Web 服务器上。如果我下载数据库并在我的本地主机以及其他服务器上尝试相同的操作,它就可以正常运行。MySQL 版本是 5.0.77。
基于这个情况,我相当有信心所发生的事情是正在创建的 tmp 表太大了,而 MySQL 则会出问题,如此博客文章所述。然而,我仍然不确定解决方案是什么......
SELECT * FROM CORE_USERNAME u JOIN CORE_PERSON p ON p.id = u.person_id JOIN CORE_SITE s ON s.id = u.site_id WHERE u.name = (SELECT MIN(u.name) FROM CORE_USERNAME u)
- OMG Ponies