MySQLって軽快な動作で、検索が早いと評判ですがどうしてもレコード数の増加、並び替えの必要な場合など、処理によっては異常に処理時間が長くなることはないですか?
処理時間の長いクエリは、システムとしては欠陥クエリなんですけど、そこは置いておいて。
ORDER BY句で並び替えをした場合のSQL文をExplainで確認してみると、ExtraにUsing filesortという表示が出た場合の話です。
この表示が出た場合、SQLクエリの処理に時間がかかります。レコード数に比例して。
とあるシステムで、検索に失敗することがありました。
開発環境ではレコード数が少ないので異常はなかったのですが。
「Got error 28 from table handler」が表示されます。
調べてみると、MySQLのTEMPデータを格納するディスクの空き容量がありません。でした。ちなみにOSはWIndows系でCドライブにMySQLを格納、設定はデフォルトでした。
TEMPデータはCドライブに格納する設定なのですが、空き容量は5GB超あるので問題ないと思っていましたが、処理中のファイルサイズを監視してみると、5GBを超えていました。
とりあえず、My.cnfのTEMPフォルダの格納場所をDドライブに変更してSQLでの並び替えの一部をPHP側に回すことで解決しました。
SQL文のチューニングは奥が深いと感じた、トラブルでした。