Php facet搜索:针对具有完整属性和超薄属性的用户的MySQL数据库设计
我正在尝试确定一种db设计,它允许根据交叉属性启用用户的快速Php facet搜索:针对具有完整属性和超薄属性的用户的MySQL数据库设计,php,mysql,search,faceted-search,Php,Mysql,Search,Faceted Search,我正在尝试确定一种db设计,它允许根据交叉属性启用用户的快速SELECT。我有两种属性: 完整-每个都有这些。例如位置/性别/年龄等 Slim-例如标签/兴趣。大多数用户拥有5万个选项中的7个。这些并不是均匀分布的,例如,许多用户对音乐感兴趣,但只有少数用户对Funk Rock感兴趣 数据集有1000万人,所以我尽量避免加入 保存数据: 对于每个完整属性,我可以为每个用户保留一列,并相应地选择。对于slim属性,我正在考虑创建另一个表,在本例中,每个用户有多行,每行代表一个属性 选择苗条属性是我
SELECT
。我有两种属性:
。对于slim属性,我正在考虑创建另一个表,在本例中,每个用户有多行,每行代表一个属性
选择苗条属性是我面临的问题。假设我没有加入SELECT中的表以避免低性能,我考虑将SELECT分为两个不同的用例:
搜索一个流行的slim属性,比如interestMusic
,它将首先从slim属性表中找到与之匹配的C*SearchAmount用户,然后根据完整属性表对其进行过滤,如果过滤过多,则使用更大的C再次进行过滤
搜索罕见的细长属性,以相反的方式执行
在实现此功能之前,我想听听其他/更好的方法来解决此问题。“数据集有上千万人,因此我正在尝试避免加入。”这将是你的问题。没有理由避免加入无论数据集有多大都可能与@Dagon重复感谢链接,我正在检查相关性。关于你对加入的评论,你能详细说明一下吗?如果我能找到一种方法将数据放在同一个表中并避免连接,那不是更好吗?不,规范化会更好,避免连接通常意味着你没有这样做。