我使用的是SQL查詢來從我OrientDB數據庫中獲取的金錢交易(v2.1.16)OrientDB:慢查詢,需要幫助創建索引來加快它
的查詢運行速度慢,我想知道如何創建索引來加快速度。
查詢是:
SELECT timestamp, txId
FROM MoneyTransaction
WHERE (
out("MoneyTransactionAccount").in("AccountMoneyProfile")[accountId] = :accountId
AND moneyType = :moneyType
AND :registerType IN registerQuantities.keys()
)
ORDER BY timestamp DESC, @rid DESC
我也有從特定點恢復時間列表中的其他變種:
SELECT timestamp, txId
FROM MoneyTransaction
WHERE (
out("MoneyTransactionAccount").in("AccountMoneyProfile")[accountId] = :accountId
AND moneyType = :moneyType
AND :registerType IN registerQuantities.keys()
)
AND timestamp <= :cutoffTimestamp
AND txId NOT IN :cutoffTxIds
ORDER BY timestamp DESC, @rid DESC
我有困難的是試圖找出如何建立具有更復雜字段的索引,即不存在於同一頂點內的accountId字段,以及要在EMBEDDEDMAP字段內找到的registerType字段。
您會創建哪個索引以加速此查詢?或者你會如何重寫這個查詢?
我的結構如下:
[Account] --> (1 to 1) AccountMoneyProfile --> [MoneyProfile]
[MoneyTransaction] --> (n to 1) MoneyTransactionAccount --> [MoneyProfile]
重要字段:
Account.accountId STRING
MoneyTransaction.registerQuantities EMBEDDEDMAP
MoneyTransaction.timestamp DATETIME
我取,現在該帳戶連接到它約500 MoneyTransaction頂點。
Hi @hbCyber,你可以發表一個你的結構的例子嗎?您的數據庫中有多少條記錄? – LucaS
@LucaS感謝提問,我已經添加了上面的細節。 – hbCyber
你好@hbCyber,你的類是類似於這些:'Account(accountId)','MoneyTransaction(txId,timestamp,registerQuantities,moneyType)','MoneyProfile(?)'? – LucaS