带Sequelize的Express JS需要更多时间来执行查询

时间:2018-11-22 07:15:03

标签: mysql node.js express sequelize.js

我有以下查询,在phpMyAdmin中花费 0.0039秒。。使用Sequelize,相同的查询在express js框架中花费 6秒。总计记录为 267121。

SELECT pm.item_type,
       pm.product_type,
       pm.product_image,
       pm.product_id,
       pm.store_id,
       pm.item_type,
       pm.product_name,
       pm.product_description,
       spd.product_price
FROM product_master AS pm
JOIN store_products_detail spd ON pm.product_id = spd.product_id
WHERE spd.product_store_id IN(907)

我花一些时间在expressJS框架中。

query execution start time 2018-11-22T07:06:24.148Z

query execution end time 2018-11-22T07:06:30.249Z

enter image description here

问题:为什么expressJS框架要花很多时间来执行查询,而在phpMyAdmin中却不花时间。

enter image description here

1 个答案:

答案 0 :(得分:2)

这是因为PHPMyAdmin具有隐式LIMIT 25(在较新的版本中);因此它只提取25行。当您的应用程序代码获取所有行时,它们全部为267121 。这是要传输的相当大的数据包。您可以进一步检查以下答案:https://stackoverflow.com/a/53030883/2469308

您应在应用程序代码中使用LIMIT ..

SELECT pm.item_type,
       pm.product_type,
       pm.product_image,
       pm.product_id,
       pm.store_id,
       pm.item_type,
       pm.product_name,
       pm.product_description,
       spd.product_price
FROM product_master AS pm
JOIN store_products_detail spd ON pm.product_id = spd.product_id
WHERE spd.product_store_id IN(907)
LIMIT 25

为了提高性能,您将需要以下索引:

  • product_id表中的product_master
  • (product_id, product_store_id)表中的store_products_detail