我在设计表结构时遇到问题,我想听听您的意见。我正在创建一个应该包含大约 1-200 万行的表,我们称它们为用户,对于每个用户,我需要存储大约 500 个 bool 值。该表的主要重点是要快速读取,不强调大小或写入时间。主要查询将是关于选择与各种 bool 列值匹配为 true 或 false 的用户数量。
所以这是我的问题:我必须在脑海中设计。
首先想到的是,我将只有 1 个表,其中包含 500 个 bool 值/tinyint 列,并且只使用一个表通过简单的查询过滤找到结果。虽然不确定此查询的速度,也不确定 MySQL 处理这么多列的能力。
第二个有点复杂。我考虑将 bool 值存储为掩码中的标志,这样列数会显着减少,但不确定在 SELECT 的 WHERE 中使用按位运算时的速度。
有没有人有过处理此类数据的经验,以及类似方法之间的速度比较?或者有没有人更好地知道如何处理这个问题?
最佳答案
请考虑第三种选择。它有点复杂,但可以提高性能。您将需要 3 个表:
- Users
- Permissions
- PermissionsxUser
Users表只有用户的信息。您的“列”被翻译成权限表的行。然后,对于您要赋予的每个权限,在 PermissionsxUser 表中添加一行。当然,每个表都需要一个 ID。
它也更有效率,因为您只在授予特定权限时才添加记录。如果用户没有特定权限 ID 的记录,则不允许执行该操作。
关于php - 在 MySQL 表中使用掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27505387/