レストラン、不動産、求人などの検索サイトは多数のチェックボックス検索項目があり、
「OR検索」が多発するため、索引がうまく使用されず、件数が増えるとすぐに遅くなると
思います。
設計上の配慮はどのようなことがあるのでしょうか。
index_merge である程度、効果があるのでしょうか。
http://dev.mysql.com/doc/refman/5.1/ja/index-mer …
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>「OR検索」が多発するため、索引がうまく使用されず、件数が増えると
>すぐに遅くなると思います。
多分その通りと思います。
特に、指定無し(あるいはすべて指定)があるために頭が痛いことになります。
⇒指定なしの場合もいちいち検索条件に指定するのか、しないのか。
また、名称などのあいまい検索が含まれることも考慮しておいたほうがいいと思います。
例えば店名のあいまい検索など。
>index_merge である程度、効果があるのでしょうか。
条件が多すぎると、期待薄としか思えませんが。
対策としては、
条件検索用テーブル(インデックス付き)と
情報格納用テーブル(プライマリキーのみ)を分けるというのも
ひとつの方法かと思います。
例)レストラン
レストラン情報テーブル
レストランID、レストラン名、ジャンル(和洋中・・・)、地域・・・・
レストラン名検索テーブル
レストラン名、レストランID
ジャンル検索テーブル
ジャンル、料理種別、レストランID
地域検索テーブル
地域(必要に応じて複数階層)、レストランID
・・・
検索画面
店名:(指定無し)
料理長名:(指定無し)
ジャンル:北京料理、上海料理にチェック
料理種別(ジャンルに従属):ラーメン以外の全部にチェック
都道府県:東京都を選択
市区町村:千代田区、江戸川区にチェック
地域:すべてを選択
営業時間区分:(指定無し)
朝昼夜区分:(指定無し)
客単価:千円未満、二千円未満、三千円未満を選択
・・・
検索方法(条件が指定されたところだけinner joinで条件検索用テーブルを追加。)
select * from レストラン情報テーブル tx
inner join ジャンル検索テーブル t2
on tx.レストランID = t1.レストランID
and t2.ジャンル in (北京料理,上海料理)
and t2.料理種別 in (・・・)
inner join 住所検索テーブル t3
on t3.都道府県 in (東京)
and t3.市区町村 in (千代田区,江戸川区)
・・・・
/* inの中の漢字でかいたところは、おのおのに相当するコード */
といった感じ。
No.1
- 回答日時:
カラムを分ける場合と、テーブルをわける場合が想定されます
前者はスケーラビリティが悪いですがinで絞り込みをすると書式が簡便で処理も速いと思います
後者は別テーブルでマッチさせた条件でjoinするので多少複雑ですが、拡張しやすいです。
どちらでもインデックスは問題なく利くとおもいますよ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
L2SWはARPテーブルを持っている?
-
外部キーだけのテーブル(主キ...
-
「テーブルに座って……」という...
-
まるいテーブル 円い 丸い 漢字...
-
ACCESS テーブルのRENAME
-
【SQL】グループ化した際の最頻...
-
MySQLで複数テーブルを作成する
-
[DB設計]多対多の問題点とは
-
Accessデータベースウインドウ...
-
コンボボックスにレコードセッ...
-
男性と2人で飲食店に行きテーブ...
-
会社の飲み会の幹事になり、座...
-
SQL 外部結合
-
【エクセル】データテーブルの...
-
飲み会で、座敷orテーブルどち...
-
MYSQLでマトリックス内容を管理...
-
UTF8のテーブルをODBCドライバ...
-
アクセスのリンクテーブル一覧...
-
テーブルリンク リンク元を知...
-
EXCEL マクロで行を挿入して貼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
L2SWはARPテーブルを持っている?
-
男性と2人で飲食店に行きテーブ...
-
外部キーだけのテーブル(主キ...
-
お金持ちのテーブル
-
テーブルリンク リンク元を知...
-
飲み会で、座敷orテーブルどち...
-
「テーブルに座って……」という...
-
面接のときテーブルが正面に。...
-
会社の飲み会の幹事になり、座...
-
オーダーの覚え方について
-
テーブル(構造)のコピー
-
論理名とコメント構文(?)について
-
MySQLで複数テーブルを作成する
-
SQL クエリ データ数
-
SQL 外部結合
-
アクセスのリンクテーブル一覧...
-
【エクセル】データテーブルの...
-
【PHP】SQL文のSUM関数で出力し...
-
件数の多い順にselect
-
1対1のリレーション(主キー同...
おすすめ情報