Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.
11-19-2020 11:33 AM
The 1st query:
MATCH (m)
WHERE m._type = 'Product' and m._name = 'iPhone'
RETURN properties(m) as properties LIMIT 3
And the 2nd one:
MATCH (m:Product)
WHERE m._name = 'iPhone'
RETURN properties(m) as properties LIMIT 3
They are functionally equivalent, but the first one take 130 ms to complete, and the 2nd one takes only 1ms. I have indexes on both '_type' and '_name'. Why isn't the index of '_type' (Product) the same fast as the usage of node label 'Product'?
Solved! Go to Solution.
11-19-2020 02:30 PM
In my case, all nodes have a '_type' property, which is actual the node label name and I built an index on that. I had thought query by label and query by that _type filter is almost the same, and learnt that it is not.
11-19-2020 01:05 PM
the first statement says effectively
find any node which meets the where condition
whereas the 2nd statement says
find a node, that node has a label of :Prodiuct and it meets the where clause.
Because the 2nd statement is for a specific label and one can create an index for a given label then that index may be used to speed up the query.
Since the 1st statement can find any node with any label an index would not be used.
11-19-2020 01:09 PM
I just profiled and it seems it's right. When no label is specified, index is useless. I don't know about this. 'index' is effective only when a node label is used. Right?
11-19-2020 01:31 PM
correct.
But I wouldnt say when no label is specified, index is useless
or maybe its simply semantics
Lets say I had a 10million nodes and 9 million had a label of :Person and 1 million had a label of :Companies. And all nodes had a property named 'status'. But for whatever reason we only indexed :Companies(status);
And then your query was
match (n)
where n.status='active'
return n;
in the above if we were to use the :Companies index, since there is an index on the property name 'status' but note its only indexed on :Companies, then the above would only report nodes with a label named :Companies and said nodes had a property named status and its value was 'active'. But what about all the :Person nodes which also had a property named status
.
11-19-2020 02:30 PM
In my case, all nodes have a '_type' property, which is actual the node label name and I built an index on that. I had thought query by label and query by that _type filter is almost the same, and learnt that it is not.
All the sessions of the conference are now available online