1

スキーマが次のようなプロジェクトに取り組んでいます。

id , key, value

および列は varchar で、表はkeyです。valueInnoDB

ユーザーはキーと値のペアに基づいて検索できます... MySQL でクエリを実行する最良の方法は何ですか? 私が考えることができるオプションは次のとおりです。

  • フォームごとkey => valueにクエリを実行し、すべての条件inner joinid一致するようにします。

  • またはバックグラウンドで、onを使用してMyISAMテーブルid, info に入力し、を使用して単一のクエリを実行します。これの利点は、Web サイトが人気があり、テーブルに 10 万行ある場合に後で得られます。コードを Lucene に簡単に移植できますが、今のところ MySQL に移植します。Full Text indexinfolike '%key:value%key2:value2%'

4

2 に答える 2

0

@ビル・カーウィン

1 つの条件に対してこれを行う場合、この EAV のようなスキーマを使用すると非常に高速になりますが、多くの場合 (特に AND と OR が混在する場合) は、おそらくバラバラになります。期待できる最善の方法は、ある種の超高速のインデックス マージであり、それはとらえどころのないものです。何か手を加えると、ほとんどの DBMS で一時テーブルを取得できます。あなたは EAV のファンではないということを読んだことを覚えていると思いますが、おそらく私はあなたを誤解しているのでしょう。

私が思い出したように、DBMS は複数のスキャンを自由に実行し、これを使い捨てのビットマップ インデックスで処理できます。しかし、フルテキスト インデックスは、ドキュメント リストを並べ替えた状態に保ち、希少なキーワードから戦略的に開始する FTS プランナーを使用して、すべての基準にわたって低コストのマージを行います。一日中「word1 & word2」を実行するために行うことはそれだけです。それらは、この種のことに最適化されています。

したがって、単純な事実がたくさんある場合、FTS インデックスはそれを行うための 1 つの適切な方法だと思います。何か不足していますか?Fact を COLORID_3 などのインデックス可能なものに変更し、「COLORID_3 & SOMETHINGELSEID_5」を検索するだけです。

クエリにマージやソートが含まれていない場合、それはほとんどウォッシュと同じになると思います。ここには何もありませんが、私たちBTREE...

于 2013-04-16T06:00:46.120 に答える