OR検索が絡む時のMySQLでの複合インデックスのはりかた
下記entriesテーブルにインデックスをどのように貼るのが良いのか困っております。
entriesテーブル
id # シーケンス、PK
language # 言語, jaとかenとかはいる
title # タイトル
description # 説明文
SQLのためのインプット
- word = 検索言語1
- language = ‘ja’
SQL
select * from entries
where language = “ja”
and (title like “%{word}%” or description like “%{word}%”)
困ってること
インデックスをどう貼るのがよいか?
下のように2つインデックスを貼っても、1SQLのこのテーブルに対しては1つしかインデックスが使われないので、おそらくindex1かindex2が使われることになるかと。
でも、titleにたいしても、descriptionにたいしてもインデックスを使われるようにしたいです。
index1 (language, title)
index2 (language, description)
拡張
- 今は検索単語1だけですが、検索単語を2つ入れた場合、
検索単語1と検索単語2でのAND検索になるようにしたいです。その場合にインデックスどうはるかもちょっといいアイデアがないです。 - Railsで実装していて、kaminariというページング用のgemを使っています。できればこのgemを使ったページングを行いたいです。。ということはSQLは1個にする必要がありそう。