1

MySQL を使用してプロジェクトのタグのような構造を設計しようとしています。

このhttp://forge.mysql.com/wiki/TagSchemaを読んだ後、m2mテーブルの設計には非常に多くjoinのものが必要なため、大きなデータではパフォーマンスが確実に低下するため、非常に失望しました。

私が念頭に置いているのは、各タグに と があるタグ テーブルですnameid

次に、タグ付けしたい項目テーブルで、各項目には という列がありtag、各タグはそのビット インデックスを 1 としてマークし、それ以外の場合はビット フィールドは 0 です。

例えば

table: tag

id   name
1    tag1
2    tag2
3    tag3



table: item

id      name    tag (in binary)     tag (in array)
 1      item1   00000001            [tag1]
 2      item2   00000100            [tag3]
 3      item3   00000110            [tag2, tag3]

itemしたがって、特定のタグでを検索したい場合は、必要なタグ&でバイナリ タグ フィールドを検索するだけですid

  1. 私のデザインは良いアイデアですか、それとも悪いアイデアですか?

  2. タグ ビットセット フィールドでインデックスを使用して検索を高速化できますか?

  3. MySQL が #2 を実行できない場合、私の最善の選択肢は何ですか (NoSQL 以外に)

前もって感謝します!

4

1 に答える 1

1

いいえ、多対多の関係に必要な 2 つの結合は大規模なデータを処理しません。これは基本的な設計パターンであり、MySQL は結合が非常に高速です。32 個を超える異なるタグ (データ型を使用する場合は 64 個) を超えると、デザインが壊れますBigInt。理由がわかりますか? また、通常は、最初にアプリケーションの実装について心配し、後でパフォーマンスが問題になったときに気にする方がよいでしょう。

于 2012-07-26T11:37:36.150 に答える