我已经将sails.js上的sql查询与使用waterline的orm的另一种方法进行了比较。
我做了以下的要求:得到所有大陆的所有国家,我将这两个要求与wireshark进行了比较。
简单的SQL查询:

"SELECT * FROM countries AS cou INNER JOIN continents AS con ON (cou.continent_id=continent.id)"

然后我做了同样的定义,一对多的国家和大陆之间的联系,并做了以下要求。
Continents.find().populate("countries").exec(function(err, result)) {
  res.send(result)
}

这样,返回结果大约需要66ms,考虑到我有15ms的网络延迟,可以通过移动node.js服务器降到50ms。
当我使用sql查询时,大约需要35毫秒,所以我可以降到近20毫秒,这对我很好。
有没有办法用这两种方法得到相同的结果?还是sql查询总是更快?

最佳答案

实际上,在这种填充中生成的查询是
一。父母的选择:
从…所在的大陆选择*。
选择所有被检索大陆的国家。
(从大陆id=大陆1的国家中选择*)
联盟
(从大陆ID=大陆2的国家中选择*)
联盟

联盟
(从大陆id=大陆的国家中选择*)
重组结果(每个国家被外键对其大陆的影响)。
此实现使限制和跳过子句的管理更容易:
continets.find().populate(“countries”).limit(2).skip(1).exec(函数(err,
结果){
res.send(结果)
}
应该只返回每个大陆的第二个和第三个国家,并且像您看到的那样实现只生成一个查询,这样DBMS就不会过载。

07-28 10:07