避免多次执行庞大的中间查询的最佳实践是什么?

时间:2018-07-17 07:30:30

标签: sql qlikview

由于商业原因,我无法指定查询。另外,我无法创建新的视图,表,只能访问数据源。

所以,问题是我的视图后面有一个非常大的查询。这无法更改。然后,我有一个查询,该查询从该视图获取数据。我们称其为LONGQUERY。 (运行时间非常长-我无法更改查询)

然后,此选择查询是几个较小查询的基础(因此所有查询都类似于“从LONGQUERY中选择”。)-其中将近30个,但是所有这些小的查询都具有相同的列。 / p>

如何仅查询LONGQUERY一次?

1 个答案:

答案 0 :(得分:4)

如果我了解您要执行的操作,则可以将整个LongQuery存储到文件中,然后进行查询-或执行常驻负载(可以更快地加载-取决于您在做什么)。

您会做类似的事情

LongQuery: SELECT * FROM LONGQUERY;
Store LongQuery into [c:\Data\LongQuery.qvd] (qvd);
Drop Table LongQuery;
SmallQuery1: LOAD field1, field2 from [c:\Data\LongQuery.qvd] (qvd) where A=1;
SmallQuery2: LOAD field1, field2 from [c:\Data\LongQuery.qvd] (qvd) where B=1;

LongQuery: SELECT * FROM LONGQUERY;
SmallQuery1: LOAD field1, field2 Resident LongQuery where A=1;
SmallQuery2: LOAD field1, field2 Resident LongQuery where B=1;
Drop Table LongQuery;

也就是说,我不确定您为什么要对30个子查询使用相同的字段-在一个具有多个过滤器的查询中,它们不可能吗?在上述两种情况下,您实际上最终只得到1个表“ SmallQuery1”,因为Qlik会自动将两个表与...中的相同字段串联起来

这就是你的追求吗?

从长远来看,最佳实践是将重装过程分为两部分-一个文件执行LONGQUERY的选择和存储,另一个文件执行QVD文件中保存的其余处理-这样一来,您在进行其他30个查询的开发工作时就不必重新查询LONGQUERY了……这是Qlik中非常常见的多层体系结构的开始。