neo4j-sh (?)$ profile MATCH (n1:`Club`)<-[r1:CLUB]-(n:`Player`) WHERE
n.`international` = true AND n1.name='FC Barcelona' RETURN COUNT(*) AS
`Count`;
+---------+
| Count |
+---------+
| 2181771 |
+---------+
1 row
7912 ms
Compiler CYPHER 3.1
Planner COST
Runtime INTERPRETED
+-------------------+----------------+---------+---------+-------------+--------------------------------------------------+
| Operator | Estimated Rows | Rows | DB Hits | Variables |
Other |
+-------------------+----------------+---------+---------+-------------+--------------------------------------------------+
| +ProduceResults | 593 | 1 | 0 | Count |
Count |
| |
+----------------+---------+---------+-------------+--------------------------------------------------+
| +EagerAggregation | 593 | 1 | 0 | Count |
|
| |
+----------------+---------+---------+-------------+--------------------------------------------------+
| +Filter | 351532 | 2181771 | 4869817 | n, n1, r1 |
n.international == { AUTOBOOL0} AND n:Player |
| |
+----------------+---------+---------+-------------+--------------------------------------------------+
| +Expand(All) | 815288 | 2444571 | 2444572 | n, r1 -- n1 |
(n1)<-[r1:CLUB]-(n) |
| |
+----------------+---------+---------+-------------+--------------------------------------------------+
| +NodeIndexSeek | 1 | 1 | 2 | n1 |
:Club(name) |
+-------------------+----------------+---------+---------+-------------+--------------------------------------------------+
Total database accesses: 7314391
That's the actual query and the execution plan. And yes, we do have indexes
on :Club(name) and :Player(international)
El martes, 27 de diciembre de 2016, 1:00:41 (UTC-3), Max De Marzi Jr.
escribió:
>
>
> Have you created Indexes for the fields you will be searching on? For
> example:
>
> CREATE INDEX ON :Club(name)
>
> What is the actual query you are trying to optimize and what is the actual
> query execution plan of the query?
>
> On Sunday, December 25, 2016 at 1:17:30 PM UTC-6, Matias Burak wrote:
>>
>> Well, actually I was simplifying the query but what we really need to do
>> is to filter by some property in club too (like club.name = 'FC
>> Barcelona') so that solution wouldn't work...
>>
>>
>> El 25 de dic. de 2016 13:27 -0300, Max De Marzi Jr. <[email protected]>,
>> escribió:
>>
>> Try:
>>
>> MATCH (n:`Player`) WHERE n.`international` = true RETURN SUM(
>> size((n)-[:CLUB]->()) ) AS `Count`;
>>
>> On Saturday, December 24, 2016 at 3:55:26 AM UTC-6, Matias Burak wrote:
>>>
>>> We are working with the latest 3.1 version, we have a database of around
>>> 3.5M nodes and 100M relationships.
>>> Doing some basic queries is very slow that makes the application
>>> unusable.
>>>
>>> neo4j-sh (?)$ profile MATCH (n1:`Club`)<-[r1:CLUB]-(n:`Player`) WHERE
>>> n.`international` = true RETURN COUNT(*) AS `Count`;
>>> +---------+
>>> | Count |
>>> +---------+
>>> | 2181771 |
>>> +---------+
>>> 1 row
>>> 28676 ms
>>>
>>> Compiler CYPHER 3.1
>>>
>>> Planner COST
>>>
>>> Runtime INTERPRETED
>>>
>>>
>>> +-------------------+----------------+---------+---------+-------------+-----------------------------------------------+
>>> | Operator | Estimated Rows | Rows | DB Hits | Variables |
>>> Other |
>>>
>>> +-------------------+----------------+---------+---------+-------------+-----------------------------------------------+
>>> | +ProduceResults | 1027 | 1 | 0 | Count |
>>> Count |
>>> | |
>>> +----------------+---------+---------+-------------+-----------------------------------------------+
>>> | +EagerAggregation | 1027 | 1 | 0 | Count |
>>> |
>>> | |
>>> +----------------+---------+---------+-------------+-----------------------------------------------+
>>> | +Filter | 1054596 | 2181771 | 4872405 | n, n1, r1
>>> | n.international == { AUTOBOOL0} AND n:Player |
>>> | |
>>> +----------------+---------+---------+-------------+-----------------------------------------------+
>>> | +Expand(All) | 2445865 | 2445865 | 2445868 | n, r1 -- n1
>>> | (n1)<-[r1:CLUB]-(n) |
>>> | |
>>> +----------------+---------+---------+-------------+-----------------------------------------------+
>>> | +NodeByLabelScan | 3 | 3 | 4 | n1 |
>>> :Club |
>>>
>>> +-------------------+----------------+---------+---------+-------------+-----------------------------------------------+
>>>
>>> Total database accesses: 7318277
>>>
>>> There are around 2.3M players and 3 clubs.
>>> It's taking 28secs the first time, then in takes around 9-10 secs.
>>> It's really annoying because it's a very simple query.
>>> Is there anything we are doing wrong? Is this something we can do about
>>> or it's the expected behaviour? This is running on a 16gbRAM machine,
>>> getting more RAM is the only way to improve it?
>>>
>>> Thanks,
>>> Matias.
>>>
>>>
>> --
>> You received this message because you are subscribed to a topic in the
>> Google Groups "Neo4j" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/neo4j/uZtQWJOC1HE/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
--
You received this message because you are subscribed to the Google Groups
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.