我有以下查询,在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中却不花时间。
答案 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