[英]How to make SPARQL queries faster on Virtuoso by controlling query execution order?
我已經設置了一個Virtuoso服務器來托管Freebase數據( 版本07.20.3217,於2017年1月5日構建 ;非常感謝您可以嘗試一下 )。
讓我們考慮一下這種情況:查找威斯康星州州( fb:m.0824r
)中最大的位置(可能是一個縣,用?var1
表示),其中?var1
包含至少一個位置(用?var2
表示),類型為fb:place_with_neighborhoods
。
我編寫了SPARQL查詢,如下所示:
PREFIX fb: <http://rdf.freebase.com/ns/>
SELECT DISTINCT ?var1 ?var2 ?v2_name WHERE {
fb:m.0824r fb:location.location.contains ?var1 .
?var1 fb:location.location.contains ?var2 .
?var2 fb:type.object.type fb:location.place_with_neighborhoods .
?var1 fb:location.location.area ?area .
OPTIONAL { ?var2 fb:type.object.name ?v2_name } .
} ORDER BY DESC(?area)
LIMIT 1
不幸的是,Virtuoso引擎無法返回查詢結果超過一個小時。
我嘗試了一些更簡單的查詢,這些查詢可能會在不到一秒鍾的時間內產生結果:
PREFIX fb: <http://rdf.freebase.com/ns/>
SELECT DISTINCT ?var1 ?var2 ?v2_name WHERE {
fb:m.0824r fb:location.location.contains ?var1 .
?var1 fb:location.location.contains ?var2 .
?var2 fb:type.object.type fb:location.place_with_neighborhoods .
OPTIONAL { ?var2 fb:type.object.name ?v2_name } .
}
# Remove the area-related information with ?var1
# Returns ONLY ONE result in 0.05s.
和,
PREFIX fb: <http://rdf.freebase.com/ns/>
SELECT DISTINCT ?var1 ?var2 ?v2_name ?area WHERE {
fb:m.0824r fb:location.location.contains ?var1 .
?var1 fb:location.location.contains ?var2 .
?var1 fb:location.location.area ?area .
OPTIONAL { ?var2 fb:type.object.name ?v2_name } .
}
# Remove the type limitation of ?var2
# Returns ~7000 results in ~1s.
鑒於這些簡單查詢的結果,我真的很困惑哪一步帶來了性能問題。 有誰可以給我一些建議嗎? 非常感謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.