Я выполнил поиск в Google, чтобы выяснить, куда обратиться, чтобы спросить об анализе запросов, но все вернуло меня сюда.Я прошу прощения, если я ошибаюсь, и это должно пойти куда-то еще.
Вот текущая статистика моей базы данных (работает сервер Neo4j v3.4):
Мой запрос Neo4jClient:
var query = graphClient
.Cypher
.Match("(cp:CurrencyPair) - [:Currency_Pair] -> (mkt:MarketInfo)")
.With("mkt, cp")
.Where((CurrencyPair cp) => cp.Name == Pair.Name)
.AndWhere((MarketInfo mkt) => mkt.StartTicksUTC >= startTicks)
.AndWhere((MarketInfo mkt) => mkt.EndTicksUTC <= endTicks)
.With("mkt, cp")
.OrderBy("mkt.EndTicksUTC DESC")
.Match("(mkt) -[Ask_Input_Data] - (a:Ask)")
.With("mkt, cp, a")
.Match("(mkt) -[Bid_Input_Data] - (b:Bid)")
.With("mkt, cp, a, b")
.Return((mkt, cp, a, b) => new
{
MarketInfo = mkt.As<MarketInfo>(),
CurrencyPair = cp.As<CurrencyPair>(),
Ask = a.As<Ask>(),
Bid = b.As<Bid>()
});
Результирующий запрос Neo4j:
profile
MATCH (cp:CurrencyPair) - [Currency_Pair] -> (mkt:MarketInfo)
WITH mkt, cp
WHERE (cp.Name = "AUD/CAD") AND (mkt.StartUTC >= "2012-01-10T15:50:00+00:00" ) AND (mkt.StartUTC <= "2012-01-10T16:00:00+00:00" )
WITH mkt, cp
ORDER BY mkt.EndTicksUTC DESC
MATCH (mkt:MarketInfo) <-[Ask_Input_Data] - (a:Ask)
WITH mkt, cp, a
MATCH (mkt:MarketInfo) <-[Bid_Input_Data] - (b:Bid)
WITH mkt, cp, a, b
RETURN mkt AS MarketInfo, cp AS CurrencyPair, a AS Ask, b AS Bid
Как вы видите, я пытаюсь выполнить запрос к базе данных, чтобы найти все узлы "MarketInfo", которые связаны сданный узел валюты, а затем вернуть узлы, которые находятся только между двумя датами.
Выполнение этого запроса занимает 7 секунд:
и возвращает 10 узлов, 15 отношений
У меня есть индексы в базе данных:
Индексы
ON :NewsEvent(Date) ONLINE
ON :MarketInfo(EndTicksUTC) ONLINE
ON :MarketInfo(EndUTC) ONLINE
ON :MarketInfo(EndUTCTicks) ONLINE
ON :NewsEvent(EventID) ONLINE
ON :Ask(Id) ONLINE
ON :Component(Id) ONLINE
ON :NewsEvent(Id) ONLINE
ON :MarketInfo(Id) ONLINE
ON :Bid(Id) ONLINE
ON :NewsEvent(Id, Date) ONLINE
ON :MarketInfo(Interval) ONLINE
ON :MarketInfo(Name) ONLINE
ON :MarketInfo(StartTicksUTC) ONLINE
ON :MarketInfo(StartUTC) ONLINE
ON :MarketInfo(StartUTCTicks) ONLINE
Есть мысли о том, как можно ускорить этот запрос?Может я просто ошибаюсь?Продавать моего босса на Neo4j становится все труднее, чем использовать проверенный и проверенный MS SQL Server ...