快速AdHoc查询

时间:2013-05-10 13:00:54

标签: sql key-value adhoc columnstore

  • (要求)
  • 我们需要快速可扩展解决方案。
  • 我们需要更快的方式来进行特殊查询;

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

原始表 ID,VALUE1,VALUE2,VALUE3,VALUE4,值5,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的子集。

我的问题是我正在重新发明轮子?这是"Column Store DB By RDBMS“还是其他什么?

1 个答案:

答案 0 :(得分:0)

您不需要10张桌子。 1个包含10个索引的表将具有相同的结果。 对于性能,它取决于条款。如果你的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

然后可能将一个查询改写为union会更快。

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

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