Sequelize 与 MySQL-2:似乎 MySQL2 原始查询执行速度更快

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

我在 Node.js (v16.x) 项目中使用 Sequelize v6.23.0。

查询执行时间非常长。因此,我对 Sequelize 和 MySQL2 库进行了快速比较。执行时间差异非常显着。 MySQL2 似乎更快。是预期的吗?或者我们需要调整任何配置吗?

对比结果:

选择查询:

Sequelize: 23.29845 ms
MySQL2: 2.010144 ms

更新查询:

Sequelize: 27.175449 ms
MySQL2: 5.979536 ms

插入查询:

Sequelize: 31.414926 ms
MySQL2: 7.720711 ms

注意: 目前,我只是在 Sequelize 和 MySQL2 中执行原始查询。请帮我解决这个问题!

node.js express sequelize.js mysql2
1个回答
0
投票

您观察到的 Sequelize 和 MySQL2 之间执行时间的显着差异在某种程度上是预期的,但可能没有达到您所看到的程度。以下是发生这种情况的原因的详细说明,以及您可以考虑提高 Sequelize 性能的一些策略:

为什么 Sequelize 可能会变慢

  1. 抽象开销:Sequelize 是一个 ORM(对象关系映射)库,这意味着它在与数据库交互的原始 SQL 上提供了一个抽象层。这种抽象简化了数据库交互,但可能会带来开销,因为它会自动处理连接池、数据映射、模型验证以及从对象和方法构建 SQL 查询等任务。

  2. 生成的 SQL:与 MySQL2 中使用的原始 SQL 相比,Sequelize 生成的 SQL 可能更复杂或优化程度较低。这可以在性能上产生相当大的差异,尤其是对于更复杂的查询或模式。

  3. 其他功能:Sequelize 包含许多功能,例如关联、挂钩和事务,即使不使用,这些功能仍可能会影响查询的初始化和执行路径。

提高 Sequelize 性能的策略

  1. 针对性能关键部分的原始查询:对于应用程序中性能至关重要的部分,请考虑通过 Sequelize 使用原始 SQL 查询。这允许您绕过一些开销,同时仍然利用 Sequelize 进行更简单或不太重要的数据库交互。您可以在 Sequelize 中运行原始查询,如下所示:

    const result = await sequelize.query("YOUR_RAW_SQL_QUERY", { type: sequelize.QueryTypes.SELECT });
    
  2. 连接池:确保 Sequelize 配置为有效使用连接池。这可以减少建立数据库连接所花费的时间。这是一个示例配置:

    const sequelize = new Sequelize(database, username, password, {
      host: 'localhost',
      dialect: 'mysql',
      pool: {
        max: 10,
        min: 0,
        acquire: 30000,
        idle: 10000
      }
    });
    
  3. 优化 Sequelize 设置:查看并调整其他 Sequelize 设置:

    • Benchmark:启用基准测试来记录每个查询所花费的时间,这可以帮助专门识别慢速查询。
    • 日志记录:如果没有必要,请禁用或减少日志记录,因为它会增加开销。
    • 索引:确保您的数据库表根据您正在运行的查询正确建立索引。
  4. 分析生成的SQL:查看Sequelize生成的SQL(您可以通过在Sequelize配置中设置

    logging: console.log
    来记录它)。有时,了解生成的 SQL 可以帮助您优化 Sequelize 查询或模型。

  5. 分析和优化查询:使用分析工具(如 MySQL 的

    EXPLAIN
    或慢速查询日志)来了解查询的执行方式以及瓶颈所在。这可能会让您深入了解某些查询是否需要在 SQL 级别或模型/配置级别进行优化。

  6. 更新依赖项:确保所有相关依赖项都是最新的,因为新版本中可能会有性能改进。

通过实施这些策略,您可以帮助缩小 Sequelize 和 MySQL2 之间的性能差距,尽管使用 ORM 的一些开销可能仍然存在。如果性能是绝对优先考虑的,并且 ORM 的好处不超过开销,请考虑在应用程序的更多部分甚至整个应用程序中使用 MySQL2。

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