And now for the amazing result:

replacing the "?r nao:userVisible 1" with a bif:exists filter makes the
query blazingly fast.

Then again this is probably not that amazing after all since the query
without the restriction is fast, thus, filtering on those results would
be, too.

Still, it is a funny result. :)

Cheers,
Sebastian

On 11/19/2010 09:52 PM, Ivan Mikhailov wrote:
> Hello Sebastian,
> 
> One variant to check is
> 
> select distinct
>    ?r
>    (bif:concat(bif:search_excerpt(bif:vector('lego'), ?v2))) as
>        ?_n_f_t_m_ex_
> where {
>  {{select distinct ?r ?v2 where
>    { ?r ?v1 ?v2 .
>      ?v2 bif:contains 'lego' .
>      ?r nao:userVisible "1"^^xsd:int .
>    } limit 10 } }
>    UNION
>  {{select distinct ?r ?v2 where
>    { ?r ?v1 ?v3 .
>      ?v3 ?v4 ?v2 .
>      ?v4 rdfs:subPropertyOf rdfs:label .
>      ?v2 bif:contains 'lego' .
>      ?r nao:userVisible "1"^^xsd:int .
>    } LIMIT 10 } }
> } LIMIT 10
> 
> because in this case no one side of union will needlessly generate data that 
> does not fit LIMIT 10.
> 
> Next optimization is to give a hint that some triples should reside in one 
> graph, if this is applicable to the task in question.
> E.g. if both ?r ?v1 ?v2 . and ?r nao:userVisible "1"^^xsd:int . are supposed 
> to be in same graph,
> 
> ?r ?v1 ?v2 .
> ?v2 bif:contains 'lego' .
> ?r nao:userVisible "1"^^xsd:int .
> 
>  can be replaced with
> 
> graph ?g { ?r ?v1 ?v2 .
> ?r nao:userVisible "1"^^xsd:int .
> ?v2 bif:contains 'lego' . }
> 
> Best Regards,
> 
> Ivan Mikhailov
> OpenLink Software
> http://virtuoso.openlinksw.com
> 
> 
> On Fri, 2010-11-19 at 19:25 +0100, Sebastian Trüg wrote:
>> Hi list,
>>
>> as always my question is about query performance.
>> The following very simple query performs very well on a V6.3rc1 with
>> default indexes:
>>
>> select distinct
>>    ?r
>>    (bif:concat(bif:search_excerpt(bif:vector('lego'), ?v2))) as
>>        ?_n_f_t_m_ex_
>> where {
>>    { ?r ?v1 ?v2 .
>>      ?v2 bif:contains 'lego' .
>>    }
>>    UNION
>>    { ?r ?v1 ?v3 .
>>      ?v3 ?v4 ?v2 .
>>      ?v4 rdfs:subPropertyOf rdfs:label .
>>      ?v2 bif:contains 'lego' .
>>    } .
>> } LIMIT 10
>>
>> However, in Nepomuk we need to hide certain types from the user. To that
>> end we have the nao:userVisible property. Adding that to the query,
>> however, slows down the query considerably:
>>
>>
>> select distinct
>>    ?r
>>    (bif:concat(bif:search_excerpt(bif:vector('lego'), ?v2))) as
>>        ?_n_f_t_m_ex_
>> where {
>>    { ?r ?v1 ?v2 .
>>      ?v2 bif:contains 'lego' .
>>    }
>>    UNION
>>    { ?r ?v1 ?v3 .
>>      ?v3 ?v4 ?v2 .
>>      ?v4 rdfs:subPropertyOf rdfs:label .
>>      ?v2 bif:contains 'lego' .
>>    } .
>>    ?r nao:userVisible "1"^^xsd:int .
>> } LIMIT 10
>>
>> Suddenly a query which was done in no time takes up to several seconds.
>> This confuses me as I would think simply adding one condition on the
>> results should not make such a difference.
>>
>> Any ideas?
>>
>> Cheers,
>> Sebastian
>>
>> ------------------------------------------------------------------------------
>> Beautiful is writing same markup. Internet Explorer 9 supports
>> standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
>> Spend less time writing and  rewriting code and more time creating great
>> experiences on the web. Be a part of the beta today
>> http://p.sf.net/sfu/msIE9-sfdev2dev
>> _______________________________________________
>> Virtuoso-users mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/virtuoso-users
> 
> 
> 

Reply via email to