在 Node.js 中优化大型 PostgreSQL 数据集的 Sequelize 查询?

问题描述 投票:0回答:1

我有一个 Node.js 应用程序,使用 Sequelize 作为 ORM 与 PostgreSQL 数据库交互。我的一个查询从一个可能包含数百万条记录且大约有 15-20 列的表中检索数据。该查询使用 rawSQL 查询根据日期范围和可选过滤器获取数据。这是查询功能的代码:

请指导我谢谢

这是我的代码

exports.getactivationData = async function (params, pagination = true) {
    try {
        
        let dbModels = await db.Models();

        let query = `SELECT * FROM my_large_table WHERE date("createdAt") BETWEEN '${params.startDate}' AND '${params.endDate}'`;

        if (!pagination) {
            query = `SELECT count(*) FROM my_large_table WHERE date("createdAt") BETWEEN '${params.startDate}' AND '${params.endDate}'`;
        }

        if (params.filter1) {
            query += ` AND sensitive_column_id = '${params.sensitiveFilterId}'`;
        }

        if (params.filter2) {
            query += ` AND sensitive_column_value = '${params.sensitiveFilterValue}'`;
        }

        if (pagination && params.limit) {
            query += ` ORDER BY "${params.sortBy}" ${params.sortType} `;
            query += ` LIMIT '${params.limit}' OFFSET '${params.offset}'`;
        }

        const myLargeTableData = await db.sequelize.query(query, {
            model: dbModels.myLargetableModel
        });

        return promiseAdapter.resolve(myLargeTableData);
    } catch (error) {
        return promiseAdapter.reject(error);
    }
}

我担心此查询的性能,尤其是在处理大型数据集时(例如,获取 10 小时的数据会产生大约 62k 条记录)。在查询大型 PostgreSQL 表时,如何优化此 Sequelize 查询以提高其性能?

此外,在我的控制器中,我这样调用此函数:

let data = await reportmodel.getactivationData (params);
// For count
let resultCount = await reportmodel.getactivationData (params, false);

注意:我想要优化,如上所述,即使限制为 10 条记录,也需要花费近 30-40 秒的时间,因为默认情况下我使用限制 = 10。仍然需要很多时间

javascript node.js postgresql sequelize.js
1个回答
0
投票

使用索引,在表中添加适当的索引以加快查询速度。有关更多信息,请参阅PostgreSQL-索引

© www.soinside.com 2019 - 2024. All rights reserved.