【问题标题】:Express JS with Sequelize take more time to execute query带有 Sequelize 的 Express JS 需要更多时间来执行查询
【发布时间】:2018-11-22 16:12:07
【问题描述】:

我在 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

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

【问题讨论】:

    标签: mysql node.js express sequelize.js


    【解决方案1】:

    这是因为 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 表中

    【讨论】:

    • 你是对的。有没有办法优化这个查询?或只放LIMIT 是优化选项。
    • @Sadikhasan 你真的想要获取应用程序代码中的所有 200k+ 行吗?你想用那个做什么?如果您想对所有数据进行一些计算,您可以在数据库端进行。查询本身可能很快(如果有适当的索引);但是获取如此大的数据包也受到其他因素的限制,例如网络带宽等。
    • @Sadikhasan 将此查询的索引详细信息添加到答案中
    • 我在我的问题中添加了索引详细信息
    • @Sadikhasan 请同时定义一个复合索引(product_id、product_store_id)。另外,正如我所说,索引仍然无法解决通过网络获取如此大的数据包的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多