Nodejs typeorm.js mysql 查询性能疑问
Nodejs typeorm.js mysql 查询性能疑问
哪个性能好?
// 1. 多次查询
const users = await Promise.all(userIds.map(id => {
return this.userRepository.findOne({
where: {
id
}
})
}))
// 2. 一次查询
const users = await this.userRepository.createQueryBuilder('user')
.where('user.id IN (:...ids)', { ids: userIds })
.getMany()
5 回复
一般情况肯定是 2 的性能比较好(只考虑数据库)。
但是如果放到实际项目中如果考虑缓存系统的话,1 的适应度反而会更高,缓存更友好更好控制。
必然是 2 性能好,缓存交给数据库自己去做就行,这种主键检索数据库自己的缓存比什么都快
适应度更高是因为都是 js, 缓存更友好没理解是啥意思,大佬解惑下
通过内部 api 获取对象的时候,因为都是通过主键操作增删改查,可以通过 id 去控制对象的缓存同步。
关于Node.js中使用TypeORM和MySQL的查询性能疑问,这里有一些关键的点和优化建议:
-
索引优化: 确保在MySQL数据库中对频繁查询的字段建立了索引。例如,如果你的查询经常根据某个字段过滤结果,应该为该字段建立索引。
CREATE INDEX idx_fieldname ON tablename(fieldname);
-
查询优化: 使用TypeORM时,尽量使用构建器API(
createQueryBuilder
)来构建复杂的查询,这样可以更好地利用查询优化器。const users = await getRepository(User) .createQueryBuilder('user') .where('user.age > :age', { age: 25 }) .getMany();
-
批量操作: 对于大量数据的插入、更新或删除操作,尽量使用批量操作来减少数据库的连接次数。
const userRepository = getRepository(User); const usersToSave = [/* array of user entities */]; await userRepository.save(usersToSave, { chunk: 100 }); // 分块保存
-
连接池配置: 合理配置MySQL连接池的大小,以避免连接过多导致的性能问题。
TypeORM.createConnection({ type: 'mysql', host: 'localhost', // 其他配置... pool: { max: 10, // 最大连接数 min: 2, // 最小连接数 idleTimeoutMillis: 30000, // 连接空闲时间 }, });
通过上述方法,可以显著提升Node.js中使用TypeORM和MySQL的查询性能。如果问题依旧存在,建议进行具体的性能分析,如使用数据库的性能分析工具或Node.js的性能监控工具。