php - 在 MySQL 表中使用掩码

标签 php mysql

我在设计表结构时遇到问题,我想听听您的意见。我正在创建一个应该包含大约 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/

相关文章:

mysql - 获取收件人的线程消息

php - MySqli INSERT 不起作用,没有错误

php - 查找 SQL 子字符串

php - 我如何在 cakephp 1.3 中使用独立类?

php - 使用PHP将文本文件转换成数组

mysql - 从 mysql 获取最新事件

mysql - ExecuteNonQuery 在必须删除大量行时不删除

mysql - 代码点火器 : retrieve lastest row in table?

php - 中止 jquery ajax 时中止 php 脚本执行

javascript - 如何在 jquery 中附加到 html 之前编译字符串(包含 Angular 目录)?