我正在使用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分,但处理时间相同。
当我在测量中仅保留关于合同的要点时,请求需要大约300ms。
我不明白为什么我与空数据库有如此多的执行时间差异,另一方面与过滤后的测量没有区别。
我错过了什么吗?还有其他可能的优化吗?
这只是一个假设,但可能只是通过归档而不是通过标记进行过滤+在单个测量中具有3个字段是性能杀手。字段未编入索引,因此按字段筛选需要全表扫描)。此外,每个数据点的多个字段创建多个索引条目。
我不确定解决方案......很可能,InfluxDB并不是为这种复杂的表架构而设计的。