按允许或阻止的值过滤 50k+ 行
Filter 50k+ rows by allowed or blocked value
我的数据库包含大约 50k(还在增加)的产品。此外,我网站上的用户已经声明了他们的原籍国。
现在我需要添加 allowed_countries
和 blocked_countries
等产品字段。
- 产品可以将这些字段留空 - 它将向所有用户显示,
- 产品可以
allowed_countries
填写 - 它只会显示给来自该国家/地区的用户,
- 产品可以填写
blocked_countries
- 它将向所有用户显示,blocked_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 不同
我的数据库包含大约 50k(还在增加)的产品。此外,我网站上的用户已经声明了他们的原籍国。
现在我需要添加 allowed_countries
和 blocked_countries
等产品字段。
- 产品可以将这些字段留空 - 它将向所有用户显示,
- 产品可以
allowed_countries
填写 - 它只会显示给来自该国家/地区的用户, - 产品可以填写
blocked_countries
- 它将向所有用户显示,blocked_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 不同