假定具有以下SQL查询:
select count(name)
from asset
where bucket in (
select @RID
from bucket
where repository_name = 'some-release'
) and blob_updated < sysdate() - 17280000000
+----+-----+
|# |count|
+----+-----+
|0 |90717|
+----+-----+
我发现存储库some-release
中有多少个文件超过200天。我花了17.588秒。但是,以下查询(我想将200天转换为毫秒)为我提供了相同的输出,但需要83.93秒:
select count(name)
from asset
let $days = (
select eval ( "200 * 24 * 60 * 60 * 1000" )
)
where bucket in (
select @RID
from bucket
where repository_name = 'some-release'
) and blob_updated < sysdate() - first($days.eval)
为什么要花这么长时间以及如何对其进行优化?
存储库some-release
包含255196个文件。
答案 0 :(得分:0)
您是否尝试过通过EXPLAIN
运行查询?在OrientDB
documentation中有更多相关内容。
每个记录都会评估LET
块,因此,如果您的some-release
存储库中有很多资产(或过去拥有),这将大大缩短查询评估时间。为避免这种情况,您可以直接在WHERE
子句中对其进行评估,即:
select count(name)
from asset
where bucket in (
select @RID
from bucket
where repository_name = 'some-release'
) and blob_updated < sysdate() - eval('200 * 24 * 60 * 60 * 1000')
请问您要达到什么目标?您是否有机会摆脱一些旧资产?您可以为此设置Cleanup Policy。
您可能希望压缩Blob存储,以减少不再需要的资产数量。在运行Admin - Compact blob store任务之前,请确保您了解会发生什么。