这个问题在这里已经有答案了:
在数据库列中存储分隔列表真的那么糟糕吗(10个答案)
11个月前关门了。
大家好,
我需要一些关于如何设计搜索优化mysql表结构的建议。
我正在创建一个房地产网站。因为我有一个属性表及其所有相关联的表。
我可以用两种方法设计保存这些记录的表。
我有礼仪主桌
id property_name
----------------
1 Property A
2 Property B
3 Property C
方法1属性表
id property_name
----------------
1 Property A
2 Property B
3 Property C
酒店设施表
id p_id amenity_id
------------------------
1 1 1
2 1 2
3 1 3
4 1 4
5 2 1
6 2 1
方法2
属性表
id property_name amenity_id
----------------------------
1 Property A 1,2,3,4,5
2 Property B 1,4,7,9,12
3 Property C 3,4,7,8,9,10
方法1查询:我可以连接表并获得特定属性的所有名称。添加优化所需的索引。对于一个物业,平均有20个便利设施。假设我有10万条属性记录,然后为了获得特定属性的便利设施,mysql查询将在property表的200万条记录中进行搜索。
方法2查询:我可以使用 FIND_IN_SET
或者 IN
mysql操作员。但我正在浏览这个搜索主题,似乎对于相同数量的数据(即10万条财产记录),这种方法将是资源密集型的,而且成本更高。
任何建议都将被采纳。你对这个场景的想法或者我应该遵循的任何其他方法。
1条答案
按热度按时间xcitsw881#
使用第一种方法。句号。第二个是错的,错的,错的。以下是一些原因:
sql字符串不应用于存储多个值。
整数应该使用正确的类型存储。
应该声明外键关系。
sql的字符串处理方法非常差。
sql有很好的方法来存储列表;它被称为“表”而不是“字符串”。