我看到使用这个的平台:
- 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 将所有数据粘合在一起以用于过滤器。