首页 > 解决方案 > 查找许多布尔匹配的结构 - MySQL

问题描述

除其他事项外,我还需要在表格中每行存储一组固定的 28 个布尔参数。我正在使用 MySQL。

然后,我需要查询以返回一个或多个特定布尔值何时为记录,特别是按 id 选择一行,然后选择它们共有true的任何其他行。


这看起来很简单,而且我确信我可以编写如上所述的代码 - 这不是我在这里要求的,但我从未实现过这种设置。

重点是有效地查找匹配项——但更新为零,记录的寿命有限,最终会被批量删除。


问题:

  1. 除了 28 个单独的 bool 列之外,还有其他存储方式吗?也许是某种二进制?我对二进制做的不多,在数据库中为零。
  2. 查询我应该查看的许多列是否有任何特定的性能问题?
  3. 如何索引一个正在搜索 28 个单独列的表?甚至值得尝试吗?

标签: mysqlperformance

解决方案


我的回答,希望对你有帮助:

  1. 您可以将这 28 个布尔值存储在派生表中,并通过某种 id 进行引用,然后将INNER JOIN. 可能每个布尔值都有一个名称,所以一行就像id, name, value.
  2. 不,列的数量如果不是问题,但每个列的大小是。当然,返回的数据越少,网络流量就越少。
  3. 如果您使用第二个表,则只需要一个索引。

如果您的表将不断更新和删除,您可以定期OPTIMIZE TABLE对它们执行。


推荐阅读