1

私はこれを使用しているプラ​​ットフォームを見ます:

- properties table -
id | name | ID_CATEGORY (INT)

- categories table -
id | name

- property_categories -
id_category | id_property

そして、カテゴリ別にプロパティを取得する

SELECT * FROM properties, categories, property_categories
WHERE 1
   AND categories.name = "Some category name here" # match this category name
   AND categories.id = property_categories.id_category # match category
   AND properties.id = property_categories.id_property # and match property

しかし、最近アプリケーションでこれを見ました (3 つではなく 2 つのテーブルを使用):

- properties table -
id | name | ID_CATEGORY (VARCHAR(255))

- categories table -
id | name

次のクエリを使用して、カテゴリ別にプロパティを取得します。

SELECT * FROM properties, categories
WHERE 1
   AND categories.name = "Some category name here" # match this category name
   AND FIND_IN_SET(categories.id, properties.ID_CATEGORY)

パフォーマンス上の利点はありますか? 最初の方法よりも 2 番目の方法を使用する必要がありますか? このままでいいのでしょうか?

多くのフィールドが組み合わされている場合があり (ID_TYPE、ID_STATUS などを含む)、フィルター用にすべてのデータを結合する大きな JOIN があります。

4

1 に答える 1

2

FIND_IN_SETコンマ区切りの文字列用です。

SELECT FIND_IN_SET('b','a,b,c,d');

これは、多数の値を格納する方法としてはお粗末です。たとえば、インデックスを使用して 'b' を見つけることはできません。

複数の行を使用します。

于 2012-09-20T23:40:20.527 に答える