有名な話だと思いますが、FIND_IN_SETはインデックスが効きません。
MySQLのFUNCTIONで渡した値にマッチする物に処理をしたかったのですが、IN (xxxx)が使えません。
結果FIND_IN_SETを使っていたのですが、データの多いテーブルの対する処理にかなり時間がかかっていました。
結果SQLの実行がタイムアウトになってしまったので、対策を行う必要がありました。
### 対策
今回の物は、バッチで処理する物だったのでworkテーブルにデータを入れて、そのテーブルとJOINする事で同様の処理を実現しました。
数分かかっていたのが、4秒で終わりました。
初めからそうしておけば良かった。
インデックスが効かないSQLは早めにテコ入れが必要です。
0 件のコメント :
コメントを投稿