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

但我最近在一个应用程序中看到了这个(有 2 个表而不是 3 个):

- 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)

有任何性能优势吗?是否应该使用第二种方法来支持第一种方法?如果我保持不变可以吗?

有时有许多字段组合在一起(包括 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 回答