私は頻繁に助けを求めてここに来ることはありませんが、私はこれにかなり不満を感じており、誰かが以前にそれに遭遇したことを望んでいます。
複数の結合を使用してテーブルからレコードをフェッチしようとすると、次のエラーが発生します。
#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
エラーがトリガーされます。これは、現在使用している特定のWebサーバーでのみ発生します。データベースをダウンロードして、ローカルホストや他のサーバーで同じことを試してみると、正常に動作します。MySQLのバージョンは5.0.77です。
これを知っていると、作成されているtmpテーブルが大きすぎて、このブログ投稿で説明されているようにMySQLがチョークするということが起こっていると私はかなり確信しています。解決策がどうなるかはまだわかりませんが...