按允许或阻止的值过滤 50k+ 行

Filter 50k+ rows by allowed or blocked value

我的数据库包含大约 50k(还在增加)的产品。此外,我网站上的用户已经声明了他们的原籍国。

现在我需要添加 allowed_countriesblocked_countries 等产品字段。

此类过滤应应用于产品目录、产品页面和搜索器(当前为全文搜索)。

如何高效地设计满足这种需求的数据库?我关心的是在相当大的负载下的性能。我在考虑 MariaDB 10.0.20 中的动态列,但我不确定按一个国家过滤的速度。

使用链接 table

产品table (id, 其他数据)

国家table (身份证、姓名等)

链接table (product_id, country_id, allowed) all not null, 1表示允许 0表示允许

select * from product 
left join linking linking_table on linking_table.product_id = product.id 
left join counties_table on (countries_table.id = linking_table.country_id)

现在where变成这样了

允许的县

where countries_table.id = (USERS COUNTRY) and linking_table.allowed = 1

不允许

where countries_table.id = (USERS COUNTRY) and (linking_table.allowed = 1 or linking_table.allowed is null)

第二个增加了产品没有黑名单的情况

每个产品可能 return 多行,因此您需要分组依据或 return 不同