使用两个子查询优化 OrientDB 中的 SQL 查询
Optimize SQL query in OrientDB with two sub-queries
假设有以下 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 个文件。
您是否尝试过 运行通过 EXPLAIN
查询? OrientDB 中有更多相关信息
文档.
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 任务之前会发生什么。
假设有以下 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 个文件。
您是否尝试过 运行通过 EXPLAIN
查询? OrientDB 中有更多相关信息
文档.
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 任务之前会发生什么。