php - 针对 PHP 数据检索进行优化的 MySQL 数据库设计

标签 php sql mysql database-design optimization

我是一名相当新的 MySQL 开发人员,正在开始一个项目,我可以通过一些初步建议来完成......

我正在创建一个数据库,该数据库主要保存一定数量的项目(1-5k 之间)以及与每个项目相关的大约 40 个 bool 变量。然后,用户将输入他们对这 40 个值的选择,系统的工作是确定“最佳”匹配项目。这可能是匹配所有 40 个变量的项目,或者如果不存在,则匹配 39 个变量等。

所以,如果有人有时间的话,请询问几个问题!

  1. 根据我使用 MySQL 的经验,对于这种大小的数据库,将数据拆分到单独的表中并没有显着的速度优势。更多表的开销太大,无法对整体性能产生任何明显的影响。因此,我建议简单地创建一个包含 40 列和最多 5000 行的大型表来存储所有信息(表锁定不是问题,因为所有查询都将是 SELECT)。这与其他人的想法和经验相符吗?
  2. 返回“最佳”匹配的最有效方法是什么?仅通过数据库结构和 SQL 命令就可以实现这一点吗?还是我必须将整个数组返回给 PHP 并在其上运行某种形式的启发式函数来确定最佳匹配?

感谢您的时间和帮助!

最佳答案

单表肯定是正确的。您可以将最多 64 个 bool 变量存储到单个 BIGINT 列中,作为每一位一个 bool 的“掩码”,并以 BIT_COUNT(~(the_column ^ user_preferences) 的形式极其快速地计算匹配) 它将计算列和掩码之间有多少位相等,给出用户的首选项(如果 PHP 在操作 64 位整数时出现问题,您可以使用两个各 32 位的列,将两个位计数相加仍然会很快)。

关于php - 针对 PHP 数据检索进行优化的 MySQL 数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/958412/

相关文章:

sql - 如何使用 pgadmin 4 导入模式 sql 文件?

php - 使用 MySQL 和 PHP 查找 Row 是否有两个给定值

php - 用于 Google 抓取目的 : Single PHP pull-page, 或每个不同项目的单独页面?

php - 如何在后端验证谷歌登录

java - hibernate 只更新部分字段

C# Linq - 来自 SQL 的 SET 语法,即 SET abc(obj 的属性)WHERE xyz = true in IEnumerable<obj>

javascript - PHP/MYSQL Javascript - 使用按钮将从数据库中提取的行值插入到文本字段中

mysql - 插入(使用 select 语句)并根据 select 语句附加 ON DUPLICATE KEY UPDATE

PHP这是header定位的最佳实践

php - 在管理产品常规框中获取 WooCommerce 产品变体属性术语