我正在使用InfluxDB,我正在尝试使用TOP()函数查询其中的值。
以下是请求的例子:
SELECT TOP("duration", 2) AS "top_duration" FROM "range" WHERE "time" > '2017-11-23T15:23:32.243Z' AND "contract" = 'A0000544' AND "type" = 'PRESENCE' AND "room" = '3908' AND "endTime" < 80785557 AND "startTime" > 28630649
在衡量标contract
中,type
和room
是标记,duration
,startTime
和endTime
是字段。
我有大约37 866 326分的范围,但是合约'A0000544'只有78 962分,房间'3908'只有10 487分
此请求需要几秒钟,我正在尝试缩短处理时间。
我尝试创建另一个测量来减少我的样本并保持最大的“持续时间”。
我只保留4 066 728分,但处理时间相同。
当我在测量中仅保留关于合同的要点时,请求大约需要300毫秒。
我不明白为什么我与空数据库有如此多的执行时间差异,另一方面与过滤后的测量没有区别。
我错过了什么吗?还有其他可能的优化吗?
答案 0 :(得分:0)
这只是一个假设,但是可能通过进行过滤,而不是仅通过标记进行过滤+ 在单个测量中具有3个字段是性能杀手。字段未编入索引,因此按字段筛选需要全表扫描)。此外,每个数据点的多个字段创建多个索引条目。
我不确定解决方案......很可能,InfluxDB不是为这种复杂的表架构而设计的。