使用sequelize.js 和mysql 的性能非常差

Som*_*sky 5 javascript mysql sequelize.js

我正在开发一个节点后端,使用feathers.js框架和sequelize.js作为数据库适配器。

总的来说,我注意到从后端查询数据时性能非常糟糕。性能最差的示例是对具有约 25 列和 10,000 个条目的表的查询。我可以使用 mysql 工作台在 0.013 秒 + 0.352 秒的获取时间(网络)内查询该表中的每个条目。当使用sequelize查询相同的查询时,查询完成平均需要2.5秒(隔离请求)。Feathers-sequelize 包用于通过命令行自动生成包括数据库请求在内的服务。

  • 节点 v8.10.0
  • 羽毛续集 v3.1.3
  • 续集 v4.42
  • mysql-服务器 v5.6

我已经尝试增加连接池sequelize能够使用但没有成功。

我在测试示例中查询时没有任何附加参数或连接。

app.service(service_name).find();

调试时会导致sequelize 调用

sequelize.models.service_name.findAll();

我意识到从数据库的二进制数据到 JSON 的转换需要一些时间,但我认为应该可以在 0.4 秒内执行此请求。

Abi*_*ash 2

我在处理包含 20000 条记录的表时遇到了一些性能问题,但我不会说这仅与 Sequelize 有关。我可以列出帮助我提高绩效的措施。

  1. separate: trueHasMany 中的Sequelize包括(有关更多信息,请参阅此线程: sequelize 中的“单独”意味着什么?
  2. 不要%在通配符搜索中添加前缀

SELECT * FROM players WHERE first_name LIKE "JOHN%";

SELECT * FROM players WHERE first_name LIKE "%JOHN%";

(这个网站解释了MySQL如何使用https://use-the-index-luke.com/sql/where-clause/searching-for-ranges/like-performance-tuning

  1. WHERE为条件和ORDER子句中常用的属性创建索引

CREATE INDEX player_search_index ON player (first_name, last_name, rank)