【问题标题】:Optimizing MySQL hundreds of records combined into a hundred groups优化 MySQL 数百条记录合并成一百组
【发布时间】:2017-01-23 16:13:47
【问题描述】:

我有一个包含数百条记录的数据库(当然它不是一个庞大的数据库,但我想保持这种状态)。我想让用户根据需要从记录中创建任意数量的组(将任何记录放入任何这些组中)。我的想法是在每一行使用一个二进制数,其中位将指示记录是否是相应(2 的幂)组的一部分。 假设有 8 个组,因此 8 位:

banana | ... | 00010011 // banana is in group 0,1 and 4
orange | ... | 00010000 // orange is in group 4 only
flower | ... | 11111111 // flower is member of every group

这非常小巧方便,在 WHERE 子句中易于处理 - 但是,这不能永远持续下去,例如更改我正在使用 PHP 的 bindec()/decbin() 函数的位,这些函数对最大字符数有限制。 如有任何建议,我将不胜感激。

【问题讨论】:

  • 好吧,假设有 100000 个组,那二元的想法行不通吧
  • 正确执行并为每个用户创建一个交叉引用表到他们的组,另一个为这个用户在一个组中的项目创建一个交叉引用表
  • 一个正确索引的交叉引用表对于选择会更有效率
  • 带有组 ID 和成员的数据透视表和您的成员表是简单直接的方法..
  • 谢谢大家。我要检查那些旋转的东西。

标签: php mysql


【解决方案1】:

我会推荐一个记录和组的矩阵,一个元表。

一张桌子,上面有您的记录(1:香蕉、2:橙、3:花等) 一张表,其中包含用户创建的组(100:group1、200:groupfruits、300:groupplants、400:groupwhatever)。

一个保存组和记录之间连接的表:

group_id | record_id
100      | 1
100      | 3
200      | 1
200      | 2
300      | 3
400      | 1
400      | 2
400      | 3

【讨论】:

  • 是的,我想过这样的 sg,但我也想知道创建一个包含数万行的表(一百个组,每个组有几百条记录)是否是可行的方法。在执行时间等方面,我完全是初学者,所以这可能根本不是问题。
  • 如果您正确索引表并使用正确的连接,数千行应该不是问题。我正在使用具有数百万个条目的元/数据透视表,没有任何问题。
猜你喜欢
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
相关资源
最近更新 更多