以下查詢從我的數據集(合同位於組織和合作夥伴之間)加載合同。優化SPARQL查詢以加載SAMPLE標籤
SELECT ?contract ?organisation ?partner
WHERE {
?organisation
a gr:BusinessEntity ;
rejstriky:contract ?contract .
?contract a rejstriky:Contract ;
rejstriky:partner ?partner .
}
GROUP BY ?contract ?organisation ?partner
此查詢返回大約8000個合同,並立即執行此操作(只需要幾分之一秒)。現在我需要爲組織和合作夥伴加載標籤/名稱。可能有多個名字,我只需要一個。這是我的查詢:
SELECT ?contract ?organisation ?partner
(SAMPLE(?organisationNames) AS ?organisationName)
(SAMPLE(?partnerNames) AS ?partnerName)
WHERE {
?organisation
a gr:BusinessEntity ;
rejstriky:contract ?contract .
?contract a rejstriky:Contract ;
rejstriky:partner ?partner .
?organisation gr:legalName ?organisationNames .
?partner gr:legalName ?partnerNames .
}
GROUP BY ?contract ?organisation ?partner
這個查詢突然需要幾分鐘才能完成。
我做了一些實驗,發現如果我決定使用單獨的SPARQL調用(通過單個批處理中的40個名稱)獲得所有名稱,則需要不到2分鐘(這將顯着更快) 。不管如何,如果我能夠在幾分之一秒內生成這8000個項目,爲每個項目加載兩個標籤不應該花費那麼長時間。
你有什麼想法如何優化我的查詢?請注意,我正在使用Virtuoso。
這看起來像Virtuoso的查詢計劃器中的一個小問題 - 沒有明顯的原因需要這麼長時間。您是否嘗試過直接報告問題並查看他們是否有解決方案? –
第一次猜測是Virtuoso中的查詢優化錯誤。您是否在沒有SAMPLE聚合的情況下測試了速度?也就是說,將'SELECT'列表更改爲'?contract?organization?partner?organisationNames?partnerNames'?你也可以將它提交給[Virtuoso用戶郵件列表](https://lists.sourceforge.net/lists/listinfo/virtuoso-users/)或[OpenLink支持論壇](http://boards.openlinksw.com /support/index.php)哪些受衆包括Virtuoso開發團隊的幾個成員... – TallTed
我發現數據集有輕微損壞。大約1000個合作伙伴由一個URI代表,然而其中有1000個不同的法定名稱。如果我刪除聚合,它實際上運行速度快了3倍,但它產生了4100萬個條目。也許這就是搞亂SAMPLE聚合並放慢查詢速度的原因。不過,我仍然會說,爲8000個項目選擇一個樣本值應該相當快,無論我選擇的集合的大小如何。你怎麼看? – tobik