我看到平台使用它:
- 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将所有数据粘合在一起用于过滤器。
答案 0 :(得分:2)
FIND_IN_SET
用于逗号分隔的字符串,例如
SELECT FIND_IN_SET('b','a,b,c,d');
这将是存储一堆值的糟糕方式 - 例如,您无法使用索引来查找“b”。
使用多行。