问题描述
使用virtuoso 7开源版本,
下面的查询很快,它会立即返回结果,
select *
WHERE {
graph <http://localhost:8890/graph> {
?catAtt qq:catId ?catId;
qq:caDataType ?caDataType;
qq:showInView ?showInview;
qq:valFormat ?valFormatKey;
qq:multiple ?multiple;
qq:position ?position;
qq:link ?link;
qq:catAttName ?catAttName;
qq:setting ?setting;
qq:flag ?flag;
qq:unit ?caUnit.
}
}
LIMIT 20
此查询是如此缓慢,结果花费了10秒钟,唯一的区别是将?catId替换为文字值1
select *
WHERE {
graph <http://localhost:8890/graph> {
?catAtt qq:catId 1;
qq:caDataType ?caDataType;
qq:showInView ?showInview;
qq:valFormat ?valFormatKey;
qq:multiple ?multiple;
qq:position ?position;
qq:link ?link;
qq:catAttName ?catAttName;
qq:setting ?setting;
qq:flag ?flag;
qq:unit ?caUnit.
}
}
LIMIT 20
为什么会这样?我仍然是sparql和Triplestore的新手,似乎我必须对该对象进行一些索引编制?
编辑:
我尝试创建GOPS索引,但我对Partition部分不了解,使用O正确吗?该分区是什么意思?创建此索引可以将第二个查询的执行时间提高到4秒,但对于DBMS来说仍然太慢。
CREATE COLUMN INDEX RDF_QUAD_GOPS
ON RDF_QUAD (G,O,P,S)
PARTITION (O VARCHAR (-1,0hexffff));
解决方法
在OpenLink社区论坛https://community.openlinksw.com/t/sparql-slow-if-more-object-value-specified/2064/2上看到以下针对此问题的回复...在此发布所有其他问题...。