mySql在节点js比phpMyAdmin慢得多

我有一个SQL查询,它在mysqlJava模块中的运行速度比在MySql客户端中运行得慢很多,比如phpMyAdmin。

我知道构buildJS对象是有开销的,但我不相信这是唯一的原因:

查询:

SELECT `Groups`.`id`, `Groups`.`title`, `Groups`.`owner`, `Groups`.`isDefault`, `Groups`.`createdAt`, `Groups`.`updatedAt`, (SELECT COUNT(*) FROM `View` WHERE `View`.`groupId` = `Groups`.`id`) AS `views`, (SELECT COUNT(*) FROM `Click` WHERE `Click`.`groupId` = `Groups`.`id`) AS `clicks`, `Users`.`id` AS `Users.id`, `Users.UserGroup`.`id` AS `Users.UserGroup.id`, `Users.UserGroup`.`UserId` AS `Users.UserGroup.UserId`, `Users.UserGroup`.`GroupId` AS `Users.UserGroup.GroupId`, `Users.UserGroup`.`owner` AS `Users.UserGroup.owner`, `Users.UserGroup`.`createdAt` AS `Users.UserGroup.createdAt`, `Users.UserGroup`.`updatedAt` AS `Users.UserGroup.updatedAt`, `Users.Activations`.`id` AS `Users.Activations.id`, `Users.Datasets`.`id` AS `Users.Datasets.id` FROM `Groups` AS `Groups` LEFT OUTER JOIN (`UserGroup` AS `Users.UserGroup` INNER JOIN `User` AS `Users` ON `Users`.`id` = `Users.UserGroup`.`UserId`) ON `Groups`.`id` = `Users.UserGroup`.`GroupId` LEFT OUTER JOIN `Activation` AS `Users.Activations` ON `Users`.`id` = `Users.Activations`.`userId` LEFT OUTER JOIN `Dataset` AS `Users.Datasets` ON `Users`.`id` = `Users.Datasets`.`userId` WHERE `Groups`.`owner` = '939ab639-fd85-42ef-8c46-a7990215e26'; 

在具有mysql模块的nodeJs中:10秒
在phpMyAdmin中:0,15秒

如果我testing相同的查询,但没有计数(*)查看和点击:

  SELECT `Groups`.`id`, `Groups`.`title`, `Groups`.`owner`, `Groups`.`isDefault`, `Groups`.`createdAt`, `Groups`.`updatedAt`, `Users`.`id` AS `Users.id`, `Users.UserGroup`.`id` AS `Users.UserGroup.id`, `Users.UserGroup`.`UserId` AS `Users.UserGroup.UserId`, `Users.UserGroup`.`GroupId` AS `Users.UserGroup.GroupId`, `Users.UserGroup`.`owner` AS `Users.UserGroup.owner`, `Users.UserGroup`.`createdAt` AS `Users.UserGroup.createdAt`, `Users.UserGroup`.`updatedAt` AS `Users.UserGroup.updatedAt`, `Users.Activations`.`id` AS `Users.Activations.id`, `Users.Datasets`.`id` AS `Users.Datasets.id` FROM `Groups` AS `Groups` LEFT OUTER JOIN (`UserGroup` AS `Users.UserGroup` INNER JOIN `User` AS `Users` ON `Users`.`id` = `Users.UserGroup`.`UserId`) ON `Groups`.`id` = `Users.UserGroup`.`GroupId` LEFT OUTER JOIN `Activation` AS `Users.Activations` ON `Users`.`id` = `Users.Activations`.`userId` LEFT OUTER JOIN `Dataset` AS `Users.Datasets` ON `Users`.`id` = `Users.Datasets`.`userId` WHERE `Groups`.`owner` = '939ab639-fd85-42ef-8c46-a7990215e26'; 

在具有mysql模块的nodeJs中:0.23秒
在phpMyAdmin:0.0008秒

表中的行数:
点击:500
查看:95k
UserGroup:40
用户:20
数据集:200
激活:200
Resultrows:5.7k

为什么第一个查询在nodeJS中比较慢? 通过phpMyAdmin看到查询本身并不慢。 如何在使用count(*)时花费更多时间来构build对象? 要构build的对象的数量应该几乎相同? 10秒真的是一个惊人的。 由于在mySql客户端中的查询速度快了很多,我认为我不能通过索引或其他数据库调整来改善它。 所有testing使用相同的DB在本地运行。

提前致谢