0
  • (要求)
  • 我们需要一个快速可扩展的解决方案。
  • 我们需要更快的方式进行即席查询;

我正在考虑将我的 10 列表分成 10 个表。该表有 100 亿行。

原表ID,VALUE1,VALUE2,VALUE3,VALUE4,VALUE5,VALUE6,VALUE7,VALUE8,VALUE9,VALUE10

10张桌子

  • ID,VALUE1(索引在 value1 上)
  • ID,VALUE2(索引在 value2 上)
  • ID,VALUE3(索引在 value3 上)
  • ID,VALUE4(索引在 value4 上)
  • ID,VALUE5(索引在 value5 上)
  • ID,VALUE6(索引在 value6 上)
  • ID,VALUE7(索引在 value7 上)
  • ID,VALUE8(索引在 value8 上)
  • ID,VALUE9(索引在 value9 上)
  • ID,VALUE10(索引在 value10 上)

我的计划是,如果我在 WHERE 条件中有 5 个子句,则转到 5 个表并询问它们,而不是使用哈希集来设置 ID 的子集。

我的问题是我正在重新发明轮子?这是 “列存储 DB By RDBMS ”还是其他什么?

4

1 回答 1

0

你不需要 10 张桌子。具有 10 个索引的 1 个表将具有相同的结果。对于性能,它取决于条款。如果您的 where 子句是 AND 表达式,例如

select * from table 
where value1 = x
and value3 = y

然后拆分查询将无济于事。

如果您的 where 子句是 OR 表达式,例如

select * from table 
where value1 = x
or value3 = y
or value5 = z

那么也许将一个查询改写为一个联合会更快。

select * from table 
where value1 = x
union select * from table 
where value3 = y
union select * from table 
where value5 = z

但性能始终取决于数据库引擎及其优化器。

于 2013-05-10T13:12:11.003 回答