Cassandra,运行子查询的有效方法是啥

Posted

技术标签:

【中文标题】Cassandra,运行子查询的有效方法是啥【英文标题】:Cassandra, what is the efficient way to run subqueryCassandra,运行子查询的有效方法是什么 【发布时间】:2019-04-05 12:10:47 【问题描述】:

我有一个巨大的员工表(大约 20 到 3000 万),并且我有大约 50,000 个员工 ID 可供选择。

最快的查询方式是什么?是不是这样的查询:

select * from employee_table where employeeid in (1,400,325 ....50000)

id 不一定按顺序排列;它们的顺序是随机的。

【问题讨论】:

能否请您提供有关问题的更多信息。如果您有 5000 个 id,那么您可以根据分区键选择数据。 【参考方案1】:

在查询中使用 IN 子句时,协调节点的负载会增加,因为对于每个值(在您的情况下为员工 ID),它都需要命中所需的节点(再次基于查询的 CL)并在返回给客户之前整理结果。因此,如果您的 IN 子句有一些值,则使用 IN 是可以的。 但是在您的情况下,如果您需要获取约 50K 员工 ID,我建议您为这 50K ID 并行解雇 select * from employee_table where employeeid = <your_employee_id> 我还建议,当你这样做时,你应该监控你的 cassandra 集群并确保这些并行查询不会导致你的集群负载过高。 (这最后的陈述是基于我的个人经验:))

【讨论】:

以上是关于Cassandra,运行子查询的有效方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

为啥子查询中的 OR 会使查询慢得多?

为啥子查询会在 group by 查询中抛出错误?

为啥子查询中的 distinct on 会损害 PostgreSQL 的性能?

相关子查询的解决方法

Cassandra选择查询多个参数

Cassandra,查询主键,跳过聚类列(timeuuid)