MySQL/PHP/CakePHPで開発しています。
30万レコードを超えるデータベースを扱っているのですが、
「全てのカテゴリから検索」のように絞り込みがあまりなく、該当するレコード件数がかなりの数になる場合、
どのようにしてSQLの負荷を下げれば良いでしょうか?
実行に非常に時間がかかります。(3秒以上)
「全てのカテゴリ」を指定する場合、指定しているWHEREの条件も、カーディナリの低いものばかりで、
例えばis_publish
カラムで0=表示中/1=非表示中のようなもので、
is_publish = 0
と指定するくらいの条件が複数あるのみです。
EXPLAIN
でSQLを調べたところ、インデックスは使用されていますが、
rows
が15万以上ありました。
(Extra
はUsing index condition; Using where; Using temporary
)
他の複数のテーブルとアソシエーションしており、LEFT JOINやINNNER JOINも含んでいます。
また、検索で使用しているため、%検索ワード%
のLIKE検索を併用しています。
(FULLTEXTインデックス
を使用した全文検索に切り替えてみましたが余計に遅くなりました。)
見直すところは多々あると思いますが、自分ではどうにも解決策が見つからないため、
何かご教授頂けますと幸いです。
宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。