我想知道WITH的性能影响是什么?我是否应该尽可能多地依赖于WITH caluse?
例如,如果我有像这样的quereis:
Select * from Input1 i where i.type = 'something'
Select * from Input1 i where i.type = 'something-else'
Select * from Input1 i where i.type = 'something-else' and i.cost > 500
Select * from Input1 i where i.size < 10
一个。我应该在Input1的所有内容中使用WITH来限制读者吗?并将其他过滤作为第二步。我猜这会损害表现。
湾难道我不是每个查询都要创建一个消费者群组吗?为什么不 ?
℃。有点不同,不同产出的表现之间是否存在关联?如果我有几个输出,其中一部分是高吞吐量的CosDb集合,还是部分表格是否重要?虽然表存储分区更好。将两者分成不同的(输入,消费者群体)对,甚至完全不同的ASA工作会更好吗?
答案 0 :(得分:1)
TL; DR:对于大多数典型的工作负载,您应该使用WITH语句来减少接收器的数量。如果您想微调表演,可以使用不同的接收器创建不同的输入。
请在下面找到详细的答案:
a)对于第一个问题,使用WITH然后在该步骤中进行过滤不会影响此查询的性能。
b)使用WITH语句,可以减少所需的接收器数量。但是,如果需要更多的接收器,则必须为每个输入定义多个输入和不同的CG。这两种方法的优缺点将取决于不同的因素,例如查询的并行化/分区程度,数据的体积和分布等。如果您具有非常高的吞吐量,则可能需要进行实验,并使用perf数字和“工作图”来指导您的决策。请注意,对于大多数当前作业,您应该使用WITH语句。
c)如果管道完全独立,您可能需要创建不同的作业以最大化性能。您可以使用ASA作业的“作业图”来可视化作业拓扑并对其进行优化。
如果它能回答你的问题,请告诉我。
谢谢,
JS