0

PHPとMySQLを使用して、ユーザーに関する多くのプロパティ(DOB、身長、体重など)を格納する必要のあるサイトを構築します。これはかなり単純です(単一のテーブル、多くのプロパティ(ほとんどすべてが必要))。

ただし、システムには、話し言葉や楽器の能力など、他の情報も保存する必要があります。全体として、そのような特性は12を超えています。デフォルトでは、別のテーブル(おそらく言語と呼ばれる)を作成してから、複合ID(user_id、language_id)を持つリンクテーブルを作成することを想定していました。

しかし、私が予想する問題は、訪問者がこれらの基準を使用してユーザーを検索しようとする場合です。使用しようとしているデータセットには、起動時に15,000人を超えるユーザーがいて、主な機能はユーザーの検索と絞り込みです。つまり、毎日数百のクエリがあり、最大で12以上のJOINを含むクエリを使用する可能性は魅力的ではありません。

だから私の質問は、より効率的になる代替案はありますか?私が考えていた1つの方法は、M2M値をIDのCSVとしてユーザーテーブルに保存し、それに対してLIKEクエリを実行することです。LIKEが最高ではないことは知っていますが、参加するよりはましですか?

可能な解決策は大歓迎です。

4

2 に答える 2

1

結合でそれを行います。次に、パフォーマンスの目標が達成されない場合は、別のことを試してください。

于 2009-09-04T13:39:55.510 に答える
0

正規化されたデータベース (マッピング テーブルによってユーザー テーブルにリンクされた言語テーブルなど) から始めて、データが明確かつ論理的に表現されていることを確認します。

パフォーマンスに問題がある場合は、クエリを調べて、適切なインデックスがあることを確認してください。

多くの結合を含むクエリを繰り返しコーディングするのが嫌いな場合は、いくつかのビューを定義してください。

ビューのクエリが非常に遅い場合は、具体化されたビューを検討してください。

1 日に数千件のレコードと数百件のクエリがある場合 (実際には、かなり小規模で使用率が低い場合)、これらの手法により、データの整合性を損なうことなく、サイトをフル スピードで実行できます。1 日あたり数百万のレコードと数百万のクエリにスケーリングする必要がある場合、これらの手法でも十分ではない可能性があります。その場合は、キャッシング非正規化を調べてください。

于 2010-02-12T00:31:37.373 に答える