Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php facet搜索:针对具有完整属性和超薄属性的用户的MySQL数据库设计_Php_Mysql_Search_Faceted Search - Fatal编程技术网

Php facet搜索:针对具有完整属性和超薄属性的用户的MySQL数据库设计

Php facet搜索:针对具有完整属性和超薄属性的用户的MySQL数据库设计,php,mysql,search,faceted-search,Php,Mysql,Search,Faceted Search,我正在尝试确定一种db设计,它允许根据交叉属性启用用户的快速SELECT。我有两种属性: 完整-每个都有这些。例如位置/性别/年龄等 Slim-例如标签/兴趣。大多数用户拥有5万个选项中的7个。这些并不是均匀分布的,例如,许多用户对音乐感兴趣,但只有少数用户对Funk Rock感兴趣 数据集有1000万人,所以我尽量避免加入 保存数据: 对于每个完整属性,我可以为每个用户保留一列,并相应地选择。对于slim属性,我正在考虑创建另一个表,在本例中,每个用户有多行,每行代表一个属性 选择苗条属性是我

我正在尝试确定一种db设计,它允许根据交叉属性启用用户的快速
SELECT
。我有两种属性:

  • 完整-每个都有这些。例如位置/性别/年龄等
  • Slim-例如标签/兴趣。大多数用户拥有5万个选项中的7个。这些并不是均匀分布的,例如,许多用户对音乐感兴趣,但只有少数用户对Funk Rock感兴趣
  • 数据集有1000万人,所以我尽量避免加入

    保存数据:

    对于每个完整属性,我可以为每个用户保留一列,并相应地选择
    。对于slim属性,我正在考虑创建另一个表,在本例中,每个用户有多行,每行代表一个属性

    选择苗条属性是我面临的问题。假设我没有加入SELECT中的表以避免低性能,我考虑将SELECT分为两个不同的用例:

  • 搜索一个流行的slim属性,比如interest
    Music
    ,它将首先从slim属性表中找到与之匹配的C*SearchAmount用户,然后根据完整属性表对其进行过滤,如果过滤过多,则使用更大的C再次进行过滤
  • 搜索罕见的细长属性,以相反的方式执行

  • 在实现此功能之前,我想听听其他/更好的方法来解决此问题。

    “数据集有上千万人,因此我正在尝试避免加入。”这将是你的问题。没有理由避免加入无论数据集有多大都可能与@Dagon重复感谢链接,我正在检查相关性。关于你对加入的评论,你能详细说明一下吗?如果我能找到一种方法将数据放在同一个表中并避免连接,那不是更好吗?不,规范化会更好,避免连接通常意味着你没有这样做。