Implemented the DB index/query optimization
This commit is contained in:
parent
f7219ece35
commit
5be478542d
@ -0,0 +1,36 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add indexes for runtime transition asset lookups.
|
||||||
|
*
|
||||||
|
* Hot paths:
|
||||||
|
* - assets lookup by storage_key when resolving transition/reversed videos
|
||||||
|
* - asset_variants join/filter by assetId and variant_type for reversed variants
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
async up(queryInterface) {
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
CREATE INDEX IF NOT EXISTS assets_storage_key_active
|
||||||
|
ON assets (storage_key)
|
||||||
|
WHERE "deletedAt" IS NULL
|
||||||
|
AND storage_key IS NOT NULL
|
||||||
|
`);
|
||||||
|
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
CREATE INDEX IF NOT EXISTS asset_variants_asset_id_variant_type_active
|
||||||
|
ON asset_variants ("assetId", variant_type)
|
||||||
|
WHERE "deletedAt" IS NULL
|
||||||
|
`);
|
||||||
|
},
|
||||||
|
|
||||||
|
async down(queryInterface) {
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
DROP INDEX IF EXISTS asset_variants_asset_id_variant_type_active
|
||||||
|
`);
|
||||||
|
|
||||||
|
await queryInterface.sequelize.query(`
|
||||||
|
DROP INDEX IF EXISTS assets_storage_key_active
|
||||||
|
`);
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -89,6 +89,13 @@ const defineAssetVariantsModel: SequelizeModelFactory = (
|
|||||||
timestamps: true,
|
timestamps: true,
|
||||||
paranoid: true,
|
paranoid: true,
|
||||||
freezeTableName: true,
|
freezeTableName: true,
|
||||||
|
indexes: [
|
||||||
|
{
|
||||||
|
fields: ['assetId', 'variant_type'],
|
||||||
|
name: 'asset_variants_asset_id_variant_type_active',
|
||||||
|
where: { deletedAt: null },
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
import { Op } from 'sequelize';
|
||||||
|
|
||||||
import type {
|
import type {
|
||||||
SequelizeModel,
|
SequelizeModel,
|
||||||
SequelizeModelFactory,
|
SequelizeModelFactory,
|
||||||
@ -133,6 +135,16 @@ const defineAssetsModel: SequelizeModelFactory = (sequelize, DataTypes) => {
|
|||||||
freezeTableName: true,
|
freezeTableName: true,
|
||||||
indexes: [
|
indexes: [
|
||||||
{ fields: ['projectId'] },
|
{ fields: ['projectId'] },
|
||||||
|
{
|
||||||
|
fields: ['storage_key'],
|
||||||
|
name: 'assets_storage_key_active',
|
||||||
|
where: {
|
||||||
|
deletedAt: null,
|
||||||
|
storage_key: {
|
||||||
|
[Op.ne]: null,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
{ fields: ['asset_type'] },
|
{ fields: ['asset_type'] },
|
||||||
{ fields: ['type'] },
|
{ fields: ['type'] },
|
||||||
{ fields: ['is_public'] },
|
{ fields: ['is_public'] },
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user