簡體   English   中英

通過兩個子查詢優化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存儲庫中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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM