Indexing
Is it possible to have both a composite and mixed index for a vertex property. If so, is it ever desirable?
Solution:Jump to solution
Depending on your operator, the good index should be called. with equality (like in your exemple) yes the composite index should be called. In another traversal, if you go on a text operator, the mixed index will be called. It’s also depends on the type of index you specified for your property in your mixed index.
4 Replies
Yes, it’s possible. Composite indices are lighter and usually faster. However, they will be used only for strict equality operations.
Mixed indices will be used for range searches, full-text searches, and partial index coverage searches.
So, yes, in some cases when you need to improve performance of lookups by equality operations but also being able to lookup using other ways it might be beneficial to use both indices on the same property.
Thanks, Oleksandr. Just for extra clarity - if I have a composite index for a property called 'myProperty' and I also have a mixed index for myProperty (just a straight forward mixed index as presented in the janusgraph docs here https://docs.janusgraph.org/schema/index-management/index-performance/), then a traversal such as g.V().has("myProperty","someValue") will use the composite index and not the mixed?
Solution
Depending on your operator, the good index should be called. with equality (like in your exemple) yes the composite index should be called. In another traversal, if you go on a text operator, the mixed index will be called. It’s also depends on the type of index you specified for your property in your mixed index.
As @Flynnt answered already. In your case the composite index will be used because you are using equality predicate (the default predicate in “has” step).
However, range predicate, full text search predicates, P.gt / P.lt, etc. will use mixed index because composite index cannot answer predicates other than equality predicate.