質問: お世話になっております。 システム上の住所の検索が非常に重く困っています。 設計上DBの住所カラムが都道府県市区町村などで分かれおらずに 一レコードですべて格納されております。 ですのでSQLは select * from 個人情報 where 住所 like % 'パラメータ' % となっており非常に重たいです。 これを改善する方法はないでしょうか? DBのカラムを分け、格納されるように見直すのは難しいです。 よろしくお願い致します。
回答: いくつかの方法が考えられます。 * データベースに全文検索インデックスを追加して、`MATCH AGAINST`で検索する(DBエンジンによってやりかたは違います) * 市町村名が重なるのは少数派なので、先頭からのインデックスを張った上で、たとえば「大阪市」で検索したい場合は`where 住所 like '大阪市%' or 住所 like '大阪府大阪市%'`となるように、先頭一致の形に変換する(都道府県・市町村での検索の場合にだけ使える手法ですが) データベースのインデックスは、全文検索など特殊なものを除いて、**先頭一致**でしか効きません。