查询:
select id, event_time from events where event_time > 1395797406712 and event_time < 1398389406712 order by event_time asc
。
此查询返回~25k行(总大小为500KB)。
当我使用node-mysql
驱动程序在Node.js中查询上述查询时,执行需要约3-4秒。 (我使用了console.time和console.timeEnd)
当我直接在mySql中查询它时,它说需要大约200毫秒。
是什么导致这种巨大的差异,以及如何改进Node.js实现以与直接的Mysql查询内联?
答案 0 :(得分:2)
原来这是亚马逊的后端问题。我们正在使用Elastic Beanstalk,EC2和RDS实例位于同一区域,但不在同一可用区。一旦我将它们设置为相同,即us-east-1a,node.js中的查询大约需要200毫秒。
答案 1 :(得分:0)
您使用的是row streaming吗?
如果没有,node-mysql正在构建一个25k元素对象,其中包含与之关联的所有分配和迭代以及赋值。而且它是用javascript(而不是很好地优化的本机代码)来实现的,因为node-mysql是纯粹的javascript。
行流将允许您一次收集一条记录计算所需的信息,就像您在大多数其他环境中看到的传统类型的基于游标的MySQL适配器一样。