我使用waterline的ORM将sails.js上的sql查询与其他方法进行了比较。
我做了以下请求:获取来自各大洲的所有国家/地区,我将这两个请求与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)
}
通过这种方式,返回结果需要大约66 ms,考虑到我有15 ms的网络延迟,我可以通过移动node.js服务器来降低到50 ms。
当我使用sql查询时,它需要大约35ms,所以我可以下降到近20ms,这对我有好处。
有没有办法使用这两种方法获得相同的结果?或者SQL查询总是更快?
答案 0 :(得分:1)
实际上,在这样的人口中生成的查询是
1.选择父母:
从大陆选择* ......
(从continent_id = continent_1的国家/地区选择*) 联盟 (从continent_id = continent_2的国家/地区选择*) 联盟 ... 联盟 (从continent_id = continent_n的国家/地区选择*)
此实现可以轻松管理limit和skip子句作为调用:
Continents.find()填充("国家&#34)。极限(2).skip(1).exec(函数(ERR, 结果)){ res.send(结果) }
应仅返回每个大洲的第二个和第三个国家/地区,您可以看到这样的实施只生成一个查询,因此DBMS不会过载。