我是一名相当新的 MySQL 开发人员,正在开始一个项目,我可以通过一些初步建议来完成......
我正在创建一个数据库,该数据库主要保存一定数量的项目(1-5k 之间)以及与每个项目相关的大约 40 个 bool 变量。然后,用户将输入他们对这 40 个值的选择,系统的工作是确定“最佳”匹配项目。这可能是匹配所有 40 个变量的项目,或者如果不存在,则匹配 39 个变量等。
所以,如果有人有时间的话,请询问几个问题!
- 根据我使用 MySQL 的经验,对于这种大小的数据库,将数据拆分到单独的表中并没有显着的速度优势。更多表的开销太大,无法对整体性能产生任何明显的影响。因此,我建议简单地创建一个包含 40 列和最多 5000 行的大型表来存储所有信息(表锁定不是问题,因为所有查询都将是 SELECT)。这与其他人的想法和经验相符吗?
- 返回“最佳”匹配的最有效方法是什么?仅通过数据库结构和 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/