[MySQL] FIND_IN_SETはインデックスが効かない

有名な話だと思いますが、FIND_IN_SETはインデックスが効きません。 MySQLのFUNCTIONで渡した値にマッチする物に処理をしたかったのですが、IN (xxxx)が使えません。
結果FIND_IN_SETを使っていたのですが、データの多いテーブルの対する処理にかなり時間がかかっていました。
結果SQLの実行がタイムアウトになってしまったので、対策を行う必要がありました。

対策

今回の物は、バッチで処理する物だったのでworkテーブルにデータを入れて、そのテーブルとJOINする事で同様の処理を実現しました。

数分かかっていたのが、4秒で終わりました。
初めからそうしておけば良かった。

インデックスが効かないSQLは早めにテコ入れが必要です。

0 件のコメント :

コメントを投稿