-
Notifications
You must be signed in to change notification settings - Fork 15
Optimize the API to get transactions #253
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
The current implementation uses the below query for the above API. SELECT "Transaction"."hash", "Transaction"."blockNumber", "Transaction"."blockHash", "Transaction"."tracker", "Transaction"."transactionIndex", "Transaction"."type", "Transaction"."seq", "Transaction"."fee", "Transaction"."networkId", "Transaction"."sig",
"Transaction"."signer", "Transaction"."errorHint", "Transaction"."timestamp", "Transaction"."isPending", "Transaction"."pendingTimestamp", "Transaction"."createdAt", "Transaction"."updatedAt", "mintAsset"."transactionHash" AS "mintAsset.transactionHash",
"mintAsset"."networkId" AS "mintAsset.networkId", "mintAsset"."shardId" AS "mintAsset.shardId", "mintAsset"."metadata" AS "mintAsset.metadata", "mintAsset"."approver" AS "mintAsset.approver", "mintAsset"."registrar" AS "mintAsset.registrar",
"mintAsset"."allowedScriptHashes" AS "mintAsset.allowedScriptHashes", "mintAsset"."approvals" AS "mintAsset.approvals", "mintAsset"."lockScriptHash" AS "mintAsset.lockScriptHash", "mintAsset"."parameters" AS "mintAsset.parameters",
"mintAsset"."supply" AS "mintAsset.supply", "mintAsset"."assetName" AS "mintAsset.assetName", "mintAsset"."assetType" AS "mintAsset.assetType", "mintAsset"."recipient" AS "mintAsset.recipient", "mintAsset"."createdAt" AS "mintAsset.createdAt",
"mintAsset"."updatedAt" AS "mintAsset.updatedAt", "transferAsset"."transactionHash" AS "transferAsset.transactionHash", "transferAsset"."networkId" AS "transferAsset.networkId", "transferAsset"."metadata" AS "transferAsset.metadata",
"transferAsset"."approvals" AS "transferAsset.approvals", "transferAsset"."expiration" AS "transferAsset.expiration", "transferAsset"."inputs" AS "transferAsset.inputs", "transferAsset"."burns" AS "transferAsset.burns",
"transferAsset"."outputs" AS "transferAsset.outputs", "transferAsset"."orders" AS "transferAsset.orders", "transferAsset"."createdAt" AS "transferAsset.createdAt", "transferAsset"."updatedAt" AS "transferAsset.updatedAt",
"composeAsset"."transactionHash" AS "composeAsset.transactionHash", "composeAsset"."networkId" AS "composeAsset.networkId", "composeAsset"."shardId" AS "composeAsset.shardId", "composeAsset"."metadata" AS "composeAsset.metadata",
"composeAsset"."approver" AS "composeAsset.approver", "composeAsset"."registrar" AS "composeAsset.registrar", "composeAsset"."allowedScriptHashes" AS "composeAsset.allowedScriptHashes", "composeAsset"."approvals" AS "composeAsset.approvals",
"composeAsset"."lockScriptHash" AS "composeAsset.lockScriptHash", "composeAsset"."parameters" AS "composeAsset.parameters", "composeAsset"."supply" AS "composeAsset.supply", "composeAsset"."assetName" AS "composeAsset.assetName",
"composeAsset"."assetType" AS "composeAsset.assetType", "composeAsset"."recipient" AS "composeAsset.recipient", "composeAsset"."inputs" AS "composeAsset.inputs", "composeAsset"."createdAt" AS "composeAsset.createdAt",
"composeAsset"."updatedAt" AS "composeAsset.updatedAt", "decomposeAsset"."transactionHash" AS "decomposeAsset.transactionHash", "decomposeAsset"."networkId" AS "decomposeAsset.networkId", "decomposeAsset"."approvals" AS "decomposeAsset.approvals",
"decomposeAsset"."input" AS "decomposeAsset.input", "decomposeAsset"."outputs" AS "decomposeAsset.outputs", "decomposeAsset"."createdAt" AS "decomposeAsset.createdAt", "decomposeAsset"."updatedAt" AS "decomposeAsset.updatedAt",
"changeAssetScheme"."transactionHash" AS "changeAssetScheme.transactionHash", "changeAssetScheme"."assetType" AS "changeAssetScheme.assetType", "changeAssetScheme"."networkId" AS "changeAssetScheme.networkId",
"changeAssetScheme"."shardId" AS "changeAssetScheme.shardId", "changeAssetScheme"."metadata" AS "changeAssetScheme.metadata", "changeAssetScheme"."approver" AS "changeAssetScheme.approver", "changeAssetScheme"."registrar" AS "changeAssetScheme.registrar",
"changeAssetScheme"."allowedScriptHashes" AS "changeAssetScheme.allowedScriptHashes", "changeAssetScheme"."approvals" AS "changeAssetScheme.approvals", "changeAssetScheme"."seq" AS "changeAssetScheme.seq",
"changeAssetScheme"."createdAt" AS "changeAssetScheme.createdAt", "changeAssetScheme"."updatedAt" AS "changeAssetScheme.updatedAt", "increaseAssetSupply"."transactionHash" AS "increaseAssetSupply.transactionHash",
"increaseAssetSupply"."networkId" AS "increaseAssetSupply.networkId", "increaseAssetSupply"."shardId" AS "increaseAssetSupply.shardId", "increaseAssetSupply"."assetType" AS "increaseAssetSupply.assetType",
"increaseAssetSupply"."approvals" AS "increaseAssetSupply.approvals", "increaseAssetSupply"."seq" AS "increaseAssetSupply.seq", "increaseAssetSupply"."lockScriptHash" AS "increaseAssetSupply.lockScriptHash",
"increaseAssetSupply"."parameters" AS "increaseAssetSupply.parameters", "increaseAssetSupply"."supply" AS "increaseAssetSupply.supply", "increaseAssetSupply"."recipient" AS "increaseAssetSupply.recipient",
"increaseAssetSupply"."createdAt" AS "increaseAssetSupply.createdAt", "increaseAssetSupply"."updatedAt" AS "increaseAssetSupply.updatedAt", "wrapCCC"."transactionHash" AS "wrapCCC.transactionHash",
"wrapCCC"."shardId" AS "wrapCCC.shardId", "wrapCCC"."lockScriptHash" AS "wrapCCC.lockScriptHash", "wrapCCC"."parameters" AS "wrapCCC.parameters", "wrapCCC"."quantity" AS "wrapCCC.quantity", "wrapCCC"."recipient" AS "wrapCCC.recipient",
"wrapCCC"."createdAt" AS "wrapCCC.createdAt", "wrapCCC"."updatedAt" AS "wrapCCC.updatedAt", "unwrapCCC"."transactionHash" AS "unwrapCCC.transactionHash", "unwrapCCC"."receiver" AS "unwrapCCC.receiver", "unwrapCCC"."burn" AS "unwrapCCC.burn",
"unwrapCCC"."createdAt" AS "unwrapCCC.createdAt", "unwrapCCC"."updatedAt" AS "unwrapCCC.updatedAt", "pay"."transactionHash" AS "pay.transactionHash", "pay"."receiver" AS "pay.receiver", "pay"."quantity" AS "pay.quantity", "pay"."createdAt" AS "pay.createdAt",
"pay"."updatedAt" AS "pay.updatedAt", "setRegularKey"."transactionHash" AS "setRegularKey.transactionHash", "setRegularKey"."key" AS "setRegularKey.key", "setRegularKey"."createdAt" AS "setRegularKey.createdAt", "setRegularKey"."updatedAt" AS "setRegularKey.updatedAt",
"createShard"."transactionHash" AS "createShard.transactionHash", "createShard"."shardId" AS "createShard.shardId", "createShard"."users" AS "createShard.users", "createShard"."createdAt" AS "createShard.createdAt", "createShard"."updatedAt" AS "createShard.updatedAt",
"setShardOwners"."transactionHash" AS "setShardOwners.transactionHash", "setShardOwners"."shardId" AS "setShardOwners.shardId", "setShardOwners"."owners" AS "setShardOwners.owners", "setShardOwners"."createdAt" AS "setShardOwners.createdAt",
"setShardOwners"."updatedAt" AS "setShardOwners.updatedAt", "setShardUsers"."transactionHash" AS "setShardUsers.transactionHash", "setShardUsers"."shardId" AS "setShardUsers.shardId", "setShardUsers"."users" AS "setShardUsers.users",
"setShardUsers"."createdAt" AS "setShardUsers.createdAt", "setShardUsers"."updatedAt" AS "setShardUsers.updatedAt", "store"."transactionHash" AS "store.transactionHash", "store"."content" AS "store.content", "store"."certifier" AS "store.certifier",
"store"."signature" AS "store.signature", "store"."createdAt" AS "store.createdAt", "store"."updatedAt" AS "store.updatedAt", "remove"."transactionHash" AS "remove.transactionHash", "remove"."textHash" AS "remove.textHash", "remove"."signature" AS "remove.signature",
"remove"."createdAt" AS "remove.createdAt", "remove"."updatedAt" AS "remove.updatedAt", "custom"."transactionHash" AS "custom.transactionHash", "custom"."handlerId" AS "custom.handlerId", "custom"."content" AS "custom.content", "custom"."createdAt" AS "custom.createdAt", "custom"."updatedAt" AS "custom.updatedAt"
FROM "Transactions" AS "Transaction"
LEFT OUTER JOIN "MintAssets" AS "mintAsset" ON "Transaction"."hash" = "mintAsset"."transactionHash"
LEFT OUTER JOIN "TransferAssets" AS "transferAsset" ON "Transaction"."hash" = "transferAsset"."transactionHash"
LEFT OUTER JOIN "ComposeAssets" AS "composeAsset" ON "Transaction"."hash" = "composeAsset"."transactionHash"
LEFT OUTER JOIN "DecomposeAssets" AS "decomposeAsset" ON "Transaction"."hash" = "decomposeAsset"."transactionHash"
LEFT OUTER JOIN "ChangeAssetSchemes" AS "changeAssetScheme" ON "Transaction"."hash" = "changeAssetScheme"."transactionHash"
LEFT OUTER JOIN "IncreaseAssetSupplies" AS "increaseAssetSupply" ON "Transaction"."hash" = "increaseAssetSupply"."transactionHash"
LEFT OUTER JOIN "WrapCCCs" AS "wrapCCC" ON "Transaction"."hash" = "wrapCCC"."transactionHash"
LEFT OUTER JOIN "UnwrapCCCs" AS "unwrapCCC" ON "Transaction"."hash" = "unwrapCCC"."transactionHash"
LEFT OUTER JOIN "Pays" AS "pay" ON "Transaction"."hash" = "pay"."transactionHash"
LEFT OUTER JOIN "SetRegularKeys" AS "setRegularKey" ON "Transaction"."hash" = "setRegularKey"."transactionHash"
LEFT OUTER JOIN "CreateShards" AS "createShard" ON "Transaction"."hash" = "createShard"."transactionHash"
LEFT OUTER JOIN "SetShardOwners" AS "setShardOwners" ON "Transaction"."hash" = "setShardOwners"."transactionHash"
LEFT OUTER JOIN "SetShardUsers" AS "setShardUsers" ON "Transaction"."hash" = "setShardUsers"."transactionHash"
LEFT OUTER JOIN "Stores" AS "store" ON "Transaction"."hash" = "store"."transactionHash"
LEFT OUTER JOIN "Removes" AS "remove" ON "Transaction"."hash" = "remove"."transactionHash"
LEFT OUTER JOIN "Customs" AS "custom" ON "Transaction"."hash" = "custom"."transactionHash"
WHERE "Transaction"."isPending" = false
ORDER BY "Transaction"."blockNumber" DESC, "Transaction"."transactionIndex" DESC
LIMIT 15 OFFSET 0;The query plan looks like the below. As you can see sorting( SELECT "hash", "blockNumber", "transactionIndex"
FROM "Transactions" AS "Transaction"
WHERE "Transaction"."isPending" = false
ORDER BY "Transaction"."blockNumber" DESC, "Transaction"."transactionIndex" DESC
LIMIT 15 OFFSET 0;
SELECT "Transaction"."hash", "Transaction"."blockNumber", "Transaction"."blockHash", "Transaction"."tracker", "Transaction"."transactionIndex", "Transaction"."type", "Transaction"."seq", "Transaction"."fee", "Transaction"."networkId",
"Transaction"."sig", "Transaction"."signer", "Transaction"."errorHint", "Transaction"."timestamp", "Transaction"."isPending", "Transaction"."pendingTimestamp", "Transaction"."createdAt", "Transaction"."updatedAt", "mintAsset"."transactionHash" AS "mintAsset.transactionHash", "mintAsset"."networkId" AS "mintAsset.networkId", "mintAsset"."shardId" AS "mintAsset.shardId", "mintAsset"."metadata" AS "mintAsset.metadata", "mintAsset"."approver" AS "mintAsset.approver",
"mintAsset"."registrar" AS "mintAsset.registrar", "mintAsset"."allowedScriptHashes" AS "mintAsset.allowedScriptHashes", "mintAsset"."approvals" AS "mintAsset.approvals", "mintAsset"."lockScriptHash" AS "mintAsset.lockScriptHash",
"mintAsset"."parameters" AS "mintAsset.parameters", "mintAsset"."supply" AS "mintAsset.supply", "mintAsset"."assetName" AS "mintAsset.assetName", "mintAsset"."assetType" AS "mintAsset.assetType", "mintAsset"."recipient" AS "mintAsset.recipient",
"mintAsset"."createdAt" AS "mintAsset.createdAt", "mintAsset"."updatedAt" AS "mintAsset.updatedAt", "transferAsset"."transactionHash" AS "transferAsset.transactionHash", "transferAsset"."networkId" AS "transferAsset.networkId",
"transferAsset"."metadata" AS "transferAsset.metadata", "transferAsset"."approvals" AS "transferAsset.approvals", "transferAsset"."expiration" AS "transferAsset.expiration", "transferAsset"."inputs" AS "transferAsset.inputs",
"transferAsset"."burns" AS "transferAsset.burns", "transferAsset"."outputs" AS "transferAsset.outputs", "transferAsset"."orders" AS "transferAsset.orders", "transferAsset"."createdAt" AS "transferAsset.createdAt",
"transferAsset"."updatedAt" AS "transferAsset.updatedAt", "composeAsset"."transactionHash" AS "composeAsset.transactionHash", "composeAsset"."networkId" AS "composeAsset.networkId", "composeAsset"."shardId" AS "composeAsset.shardId",
"composeAsset"."metadata" AS "composeAsset.metadata", "composeAsset"."approver" AS "composeAsset.approver", "composeAsset"."registrar" AS "composeAsset.registrar", "composeAsset"."allowedScriptHashes" AS "composeAsset.allowedScriptHashes",
"composeAsset"."approvals" AS "composeAsset.approvals", "composeAsset"."lockScriptHash" AS "composeAsset.lockScriptHash", "composeAsset"."parameters" AS "composeAsset.parameters", "composeAsset"."supply" AS "composeAsset.supply",
"composeAsset"."assetName" AS "composeAsset.assetName", "composeAsset"."assetType" AS "composeAsset.assetType", "composeAsset"."recipient" AS "composeAsset.recipient", "composeAsset"."inputs" AS "composeAsset.inputs",
"composeAsset"."createdAt" AS "composeAsset.createdAt", "composeAsset"."updatedAt" AS "composeAsset.updatedAt", "decomposeAsset"."transactionHash" AS "decomposeAsset.transactionHash", "decomposeAsset"."networkId" AS "decomposeAsset.networkId",
"decomposeAsset"."approvals" AS "decomposeAsset.approvals", "decomposeAsset"."input" AS "decomposeAsset.input", "decomposeAsset"."outputs" AS "decomposeAsset.outputs", "decomposeAsset"."createdAt" AS "decomposeAsset.createdAt",
"decomposeAsset"."updatedAt" AS "decomposeAsset.updatedAt", "changeAssetScheme"."transactionHash" AS "changeAssetScheme.transactionHash", "changeAssetScheme"."assetType" AS "changeAssetScheme.assetType",
"changeAssetScheme"."networkId" AS "changeAssetScheme.networkId", "changeAssetScheme"."shardId" AS "changeAssetScheme.shardId", "changeAssetScheme"."metadata" AS "changeAssetScheme.metadata", "changeAssetScheme"."approver" AS "changeAssetScheme.approver",
"changeAssetScheme"."registrar" AS "changeAssetScheme.registrar", "changeAssetScheme"."allowedScriptHashes" AS "changeAssetScheme.allowedScriptHashes", "changeAssetScheme"."approvals" AS "changeAssetScheme.approvals",
"changeAssetScheme"."seq" AS "changeAssetScheme.seq", "changeAssetScheme"."createdAt" AS "changeAssetScheme.createdAt", "changeAssetScheme"."updatedAt" AS "changeAssetScheme.updatedAt", "increaseAssetSupply"."transactionHash" AS "increaseAssetSupply.transactionHash",
"increaseAssetSupply"."networkId" AS "increaseAssetSupply.networkId", "increaseAssetSupply"."shardId" AS "increaseAssetSupply.shardId", "increaseAssetSupply"."assetType" AS "increaseAssetSupply.assetType",
"increaseAssetSupply"."approvals" AS "increaseAssetSupply.approvals", "increaseAssetSupply"."seq" AS "increaseAssetSupply.seq", "increaseAssetSupply"."lockScriptHash" AS "increaseAssetSupply.lockScriptHash",
"increaseAssetSupply"."parameters" AS "increaseAssetSupply.parameters", "increaseAssetSupply"."supply" AS "increaseAssetSupply.supply", "increaseAssetSupply"."recipient" AS "increaseAssetSupply.recipient",
"increaseAssetSupply"."createdAt" AS "increaseAssetSupply.createdAt", "increaseAssetSupply"."updatedAt" AS "increaseAssetSupply.updatedAt", "wrapCCC"."transactionHash" AS "wrapCCC.transactionHash", "wrapCCC"."shardId" AS "wrapCCC.shardId",
"wrapCCC"."lockScriptHash" AS "wrapCCC.lockScriptHash", "wrapCCC"."parameters" AS "wrapCCC.parameters", "wrapCCC"."quantity" AS "wrapCCC.quantity", "wrapCCC"."recipient" AS "wrapCCC.recipient", "wrapCCC"."createdAt" AS "wrapCCC.createdAt",
"wrapCCC"."updatedAt" AS "wrapCCC.updatedAt", "unwrapCCC"."transactionHash" AS "unwrapCCC.transactionHash", "unwrapCCC"."receiver" AS "unwrapCCC.receiver", "unwrapCCC"."burn" AS "unwrapCCC.burn", "unwrapCCC"."createdAt" AS "unwrapCCC.createdAt",
"unwrapCCC"."updatedAt" AS "unwrapCCC.updatedAt", "pay"."transactionHash" AS "pay.transactionHash", "pay"."receiver" AS "pay.receiver", "pay"."quantity" AS "pay.quantity", "pay"."createdAt" AS "pay.createdAt", "pay"."updatedAt" AS "pay.updatedAt",
"setRegularKey"."transactionHash" AS "setRegularKey.transactionHash", "setRegularKey"."key" AS "setRegularKey.key", "setRegularKey"."createdAt" AS "setRegularKey.createdAt", "setRegularKey"."updatedAt" AS "setRegularKey.updatedAt",
"createShard"."transactionHash" AS "createShard.transactionHash", "createShard"."shardId" AS "createShard.shardId", "createShard"."users" AS "createShard.users", "createShard"."createdAt" AS "createShard.createdAt",
"createShard"."updatedAt" AS "createShard.updatedAt", "setShardOwners"."transactionHash" AS "setShardOwners.transactionHash", "setShardOwners"."shardId" AS "setShardOwners.shardId", "setShardOwners"."owners" AS "setShardOwners.owners",
"setShardOwners"."createdAt" AS "setShardOwners.createdAt", "setShardOwners"."updatedAt" AS "setShardOwners.updatedAt", "setShardUsers"."transactionHash" AS "setShardUsers.transactionHash", "setShardUsers"."shardId" AS "setShardUsers.shardId",
"setShardUsers"."users" AS "setShardUsers.users", "setShardUsers"."createdAt" AS "setShardUsers.createdAt", "setShardUsers"."updatedAt" AS "setShardUsers.updatedAt", "store"."transactionHash" AS "store.transactionHash", "store"."content" AS "store.content",
"store"."certifier" AS "store.certifier", "store"."signature" AS "store.signature", "store"."createdAt" AS "store.createdAt", "store"."updatedAt" AS "store.updatedAt", "remove"."transactionHash" AS "remove.transactionHash", "remove"."textHash" AS "remove.textHash",
"remove"."signature" AS "remove.signature", "remove"."createdAt" AS "remove.createdAt", "remove"."updatedAt" AS "remove.updatedAt", "custom"."transactionHash" AS "custom.transactionHash", "custom"."handlerId" AS "custom.handlerId",
"custom"."content" AS "custom.content", "custom"."createdAt" AS "custom.createdAt", "custom"."updatedAt" AS "custom.updatedAt" FROM "Transactions" AS "Transaction"
LEFT OUTER JOIN "MintAssets" AS "mintAsset" ON "Transaction"."hash" = "mintAsset"."transactionHash"
LEFT OUTER JOIN "TransferAssets" AS "transferAsset" ON "Transaction"."hash" = "transferAsset"."transactionHash"
LEFT OUTER JOIN "ComposeAssets" AS "composeAsset" ON "Transaction"."hash" = "composeAsset"."transactionHash"
LEFT OUTER JOIN "DecomposeAssets" AS "decomposeAsset" ON "Transaction"."hash" = "decomposeAsset"."transactionHash"
LEFT OUTER JOIN "ChangeAssetSchemes" AS "changeAssetScheme" ON "Transaction"."hash" = "changeAssetScheme"."transactionHash"
LEFT OUTER JOIN "IncreaseAssetSupplies" AS "increaseAssetSupply" ON "Transaction"."hash" = "increaseAssetSupply"."transactionHash"
LEFT OUTER JOIN "WrapCCCs" AS "wrapCCC" ON "Transaction"."hash" = "wrapCCC"."transactionHash"
LEFT OUTER JOIN "UnwrapCCCs" AS "unwrapCCC" ON "Transaction"."hash" = "unwrapCCC"."transactionHash"
LEFT OUTER JOIN "Pays" AS "pay" ON "Transaction"."hash" = "pay"."transactionHash"
LEFT OUTER JOIN "SetRegularKeys" AS "setRegularKey" ON "Transaction"."hash" = "setRegularKey"."transactionHash"
LEFT OUTER JOIN "CreateShards" AS "createShard" ON "Transaction"."hash" = "createShard"."transactionHash"
LEFT OUTER JOIN "SetShardOwners" AS "setShardOwners" ON "Transaction"."hash" = "setShardOwners"."transactionHash"
LEFT OUTER JOIN "SetShardUsers" AS "setShardUsers" ON "Transaction"."hash" = "setShardUsers"."transactionHash"
LEFT OUTER JOIN "Stores" AS "store" ON "Transaction"."hash" = "store"."transactionHash"
LEFT OUTER JOIN "Removes" AS "remove" ON "Transaction"."hash" = "remove"."transactionHash"
LEFT OUTER JOIN "Customs" AS "custom" ON "Transaction"."hash" = "custom"."transactionHash"
WHERE "Transaction"."hash" IN ('84ecfe11d09b7b1c5fa86151aca5ddd5a4f3527d382901e0ee488b654926b68d', '5e8a58c563ac53ec32b684df2ff82a16678257c71f7d0650b11e82402706026c', '512cb27f0fab399ed9c716eafa42382d82f9a40c4c90753bcf2e0c109d43fbb6', '381fa9a3b9473fa23f0b5c3d4e09d195ab697ab0a365bf54937c3ded7fda081c', 'd19f93f4fc7b704fef96eadfb7a47d1e3a4c71268d0cd0f325b9c2fd94c43b3d', '815bc6332cfdb436d4f7bf2417d2ca2223f8efecc80a65da8a0196b782fd2e87', '604e80e3df71fd53361dfb9820a351bff2276e1687e4dc2db278d28f89450a3e', 'f439bfcd8d8721e5bf051e046026bd5b0eebde964444588c66aebc07717cc9f2', 'aab5d29bffcfff6c02d80e7962dd5e99724cf29565ea969198ff2eab5995b1e4', 'f9bad3cde8571eb18fc8ef3d6c82a8520839cc27156d15d357e3d31ae05dc0dc', '1acda715273535d2d9f40cdcc7bd41ca13bb1efeed78ee2f6e9cee619ef0a360', '6114f446baf0634f7bb1d2e344e3c045392fbf840acfc3f6b7d249d28a9df09f', '89bd4e20da9c624f3ae09dc151ed2db16117b0e1c161cef921bd0cd350fc9a03', 'cc0e031fb71905e09056ee49407ad28beb5096391668c77f6544f262878acdff', '08ec172ae4795fa9a6ef957ed2513eecb2866fad76f2d4c0f882f26dff741a39') AND "Transaction"."isPending" = false ORDER BY "Transaction"."blockNumber" DESC, "Transaction"."transactionIndex" DESC;Still sorting is the most expensive operator, but it's much cheaper than the previous one because the width is much smaller(17217 vs. 73). |
|
However, |
|
This patch make SELECT "Transaction"."hash", "Transaction"."blockNumber", "Transaction"."blockHash", "Transaction"."tracker", "Transaction"."transactionIndex", "Transaction"."type", "Transaction"."seq", "Transaction"."fee", "Transaction"."networkId",
"Transaction"."sig", "Transaction"."signer", "Transaction"."errorHint", "Transaction"."timestamp", "Transaction"."isPending", "Transaction"."pendingTimestamp", "Transaction"."createdAt", "Transaction"."updatedAt"
FROM "Transactions" AS "Transaction"
WHERE "Transaction"."isPending" = false
AND (
SELECT "transactionHash"
FROM "AddressLogs" AS "addressLogs"
WHERE ("addressLogs"."address" = 'wccq92pg86am6jrwl2gdlckdakwdm70ff5gs5w8ryc0' AND "addressLogs"."transactionHash" = "Transaction"."hash") LIMIT 1
) IS NOT NULL
ORDER BY "Transaction"."blockNumber" DESC, "Transaction"."transactionIndex" DESC
SELECT "Transaction".*
FROM (
SELECT "Transaction"."hash", "Transaction"."blockNumber", "Transaction"."transactionIndex"
FROM "Transactions" AS "Transaction"
INNER JOIN "AddressLogs" AS "addressLogs"
ON "Transaction"."hash" = "addressLogs"."transactionHash"
WHERE "Transaction"."isPending" = false
AND "addressLogs"."address" = 'wccq959puf2uj2587x86am0ycxeqjqgnrm9uy7qyjhr'
) AS "Transaction"
ORDER BY "Transaction"."blockNumber" DESC, "Transaction"."transactionIndex" DESC
LIMIT 15 OFFSET 0I'm finding a way to execute this query in sequelize. SELECT "Transaction"."hash", "Transaction"."blockNumber", "Transaction"."transactionIndex"
FROM "Transactions" AS "Transaction"
INNER JOIN "AddressLogs" AS "addressLogs" ON "Transaction"."hash" = "addressLogs"."transactionHash" AND "addressLogs"."address" = 'wccq92pg86am6jrwl2gdlckdakwdm70ff5gs5w8ryc0'
WHERE "Transaction"."isPending" = false
GROUP BY "Transaction"."hash", "Transaction"."blockNumber", "Transaction"."transactionIndex"
ORDER BY "Transaction"."blockNumber" DESC, "Transaction"."transactionIndex" DESC
LIMIT 15 OFFSET 0; |
|
Now, SELECT "Transaction"."hash", "Transaction"."blockNumber", "Transaction"."transactionIndex"
FROM "Transactions" AS "Transaction"
INNER JOIN "AddressLogs" AS "addressLogs" ON "Transaction"."hash" = "addressLogs"."transactionHash" AND "addressLogs"."address" = 'wccq92pg86am6jrwl2gdlckdakwdm70ff5gs5w8ryc0'
WHERE "Transaction"."isPending" = false
GROUP BY "Transaction"."hash", "Transaction"."blockNumber", "Transaction"."transactionIndex"
ORDER BY "Transaction"."blockNumber" DESC, "Transaction"."transactionIndex" DESC
LIMIT 15 OFFSET 0; |
|
@joojis Please review it. |
The previous query joins all rows of tables to calculate offset even though it needs only itemsPerPage rows. This patch splits the query to get transactions. The first query gets the transaction hash that the second query selects. It helps the second query not to scan all the table of the rows of included tables.
joojis
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me.
The previous query joins all rows of tables to calculate offset even though it needs only itemsPerPage rows.
This patch splits the query to get transactions. The first query gets the transaction hash that the second query selects. It helps the second query not to scan all the table of the rows of included tables.