[英]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
存儲庫中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')
請問您要達到什么目標? 您是否有機會擺脫一些舊資產? 您可以為此目的設置清理策略 。
您可能希望壓縮Blob存儲,以減少不再需要的資產數量。 在運行“ 管理-緊湊型Blob存儲”任務之前,請確保您了解會發生什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.