【发布时间】:2022-01-25 09:54:38
【问题描述】:
我不知道为什么我们使用 Sequelize(MySQL) findAndCountAll 方法。因为它发送了两个查询,我认为这很浪费。
假设我们有一个Test 表,如下所示。
| id | name |
|---|---|
| 1 | a |
| 2 | b |
并调用findAndCountAll 和findAll 方法,如下所示。
const result1 = await Test.findAndCountAll() --> {count: 2, rows: [{id: 1, name: 'a'}, {id: 2, name: 'b'}]}
const result2 = await Test.findAll() --> [{id: 1, name: 'a'}, {id: 2, name: 'b'}]
我们可以通过调用length(result2.length)从result2中得到count。
findAndCountAll 方法发送两次查询,findAll 方法发送一次查询。
-- findAndCountAll
SELECT count(*) FROM Test;
SELECT id, name FROM Test;
-- findAll
SELECT id, name FROM Test;
我认为如果Test 表中有这么多行,这会对数据库造成很大的负载(是findAll 的两倍)。
这就是为什么我认为findAndCountAll 方法很浪费。
有没有一种情况是findAndCountAll 的性能优于findAll 和length?还是我们使用 findAndCountAll 方法的原因?
【问题讨论】:
标签: mysql database orm sequelize.js backend