質問: 宜しくお願いいたします。 MysqlのREGEXP(正規表現)を用いて、2000万行の住所マスターから、特定のキーワードを含むレコードを検索する際、REGEXPの仕様でindexが効かず、結果取得にものすごい時間を要してしまいます。 likeを用いらない理由ですが、複数のキーワードで検索を行うために、REGEXPを用いております。 処理の時間を短縮する方法はありますでしょうか? お知恵を拝借できますと幸いです。 サンプルとして、テーブル構造と、実行しているsqlを添付します。 ■テーブル構造 ken_name city_name town_name aza_name address 北海道 札幌市中央区 北1条東 11丁目 22−41 ■SQL SELECT DISTINCT CONCAT(IFNULL(ken_name,''),IFNULL(city_name,''),IFNULL(town_name,''),IFNULL(aza_name,''),IFNULL(address,'')), ken_name, city_name, town_name, aza_name , address FROM phonebook_houzin WHERE CONCAT(IFNULL(ken_name,''),IFNULL(city_name,''),IFNULL(town_name,''),IFNULL(aza_name,''),IFNULL(address,'')) REGEXP '.*北海.*中央.*北.*条.*東.*1?.*4?.*';
回答: まさに正規表現はインデックスをつかわないので諦めて下さい 住所の場合ある程度まで正規化できるので絞り込めば 作業量は数十分の一にはなるんじゃないですか?