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

Mysql 带Sequelize的Express JS执行查询需要更多时间,mysql,node.js,express,sequelize.js,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.pr

在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框架中花了以下时间

查询执行开始时间2018-11-22T07:06:24.148Z

查询执行结束时间2018-11-22T07:06:30.249Z

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


这是因为PHPMyAdmin有一个隐式的
限制25
(在较新版本中);因此,它只获取25行。当应用程序代码获取所有行时,即所有267121。这是相当大的数据包传输。您可以进一步检查此答案:

您应该在应用程序代码中使用
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\u-id
    product\u-master
    表格中
  • (产品标识、产品门店标识)
    门店产品详细信息
    表中

你说得对。有没有办法优化这个查询?或者只有put
LIMIT
是优化选项。@Sadikhasan您真的想获取应用程序代码中的所有200k+行吗。你想用它做什么?如果您想对所有数据进行一些计算,可以在数据库端进行。查询本身可能很快(如果有适当的索引);但是获取如此大的数据包也受到其他因素的限制,如网络带宽等。@Sadikhasan将此查询的索引细节添加到了answerI中,并在我的question@Sadikhasan还请定义一个复合索引(产品标识、产品门店标识)。而且,正如我所说的,索引仍然不能解决通过网络获取如此大的数据包的问题。