代码之家  ›  专栏  ›  技术社区  ›  Sadikhasan

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

  •  1
  • Sadikhasan  · 技术社区  · 7 年前

    我有下面的查询,它需要 0.0039秒。 in phpmyadmin。在Express JS框架中,使用Sequelize进行相同的查询。总记录为 267121.

    选择pm.item_type,
    PM.产品类型,
    产品图片,
    P.M.
    普罗塞罗伊德
    PM.ITMYTY型,
    PM.产品名称,
    PM.产品描述,
    SPD.产品价格
    从产品主控作为PM
    加入商店\u products_detail spd on pm.product_id=spd.product_id
    spd.product_在(907)中存储\u id
    
    
    

    我在ExpressJS框架中花费了以下时间。

    查询执行开始时间2018-11-22t07:06:24.148z

    查询执行结束时间2018-11-22t07:06:30.249z

    问题:为什么ExpressJS框架在phpmyadmin中执行查询需要很多时间,而不需要太多时间。

    .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中执行查询不需要太多时间。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Madhur Bhaiya    7 年前

    这是因为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 桌子
    推荐文章