我从我们的开发人员那里得到了一个查询,该查询没有在服务器上执行并且给出了以下错误 -
Incorrect key file for table '/tmp/#sql_18b4_0.MYI'; try to repair it
我已经单独检查了所有表及其索引,一切似乎都是文件。即使我已经在其他一些查询联接中检查了所有这些表,这些联接正在获取比此查询更多的数据并且工作正常。
即使是这些表,每张表的记录也不会少于1000条。
查询是:
SELECT `PsMasterSubject`.`id`, `PsMasterSubject`.`name`, `PsProgram`.`name`, `PsStreamLevel`.`id`
FROM `misdb`.`ps_master_subjects` AS `PsMasterSubject`
LEFT JOIN `misdb`.`ps_programs` AS `PsProgram` ON (`PsMasterSubject`.`ps_program_id` = `PsProgram`.`id`)
LEFT JOIN `misdb`.`ps_stream_levels` AS `PsStreamLevel` ON (`PsStreamLevel`.`id` AND `PsProgram`.`ps_stream_level_id`)
LEFT JOIN `misdb`.`ps_program_levels` AS `PsProgramLevel` ON (`PsProgramLevel`.`id` AND `PsStreamLevel`.`ps_program_level_id`)
WHERE 1 = 1
ORDER BY `PsMasterSubject`.`id` DESC LIMIT 10;
我得到的问题与此类似,但我检查过我的桌子没有破损。
任何快速帮助都将受到高度赞赏。
答案 0 :(得分:1)
哦,这是一个愚蠢的错误,来自我的开发人员端,30分钟后脑力激荡设计这个查询以不同的方式我得到这个问题,开发人员使用加入错误的方式,由于这个mysql无法正确加入表数据并消耗/ tmp目录中的所有空间并抛出此错误。正确的查询在这里 -
SELECT `PsMasterSubject`.`id`, `PsMasterSubject`.`name`, `PsProgram`.`name`, `PsStreamLevel`.`id`
FROM `misdb`.`ps_master_subjects` AS `PsMasterSubject`
LEFT JOIN `misdb`.`ps_programs` AS `PsProgram` ON (`PsMasterSubject`.`ps_program_id` = `PsProgram`.`id`)
LEFT JOIN `misdb`.`ps_stream_levels` AS `PsStreamLevel` ON (`PsStreamLevel`.`id` = `PsProgram`.`ps_stream_level_id`)
LEFT JOIN `misdb`.`ps_program_levels` AS `PsProgramLevel` ON (`PsProgramLevel`.`id` = `PsStreamLevel`.`ps_program_level_id`)
WHERE 1 = 1
ORDER BY `PsMasterSubject`.`id` DESC LIMIT 10;
现在问题是这是一个mysql错误,因为mysql应该抛出错误的语法错误但是这里mysql正在尝试为临时数据创建一个临时表。
如果有人能告诉我,我将非常感激。