mysql - 合并两个查询时有什么方法可以优化这个 MySQL 查询?
问题描述
我试图通过 product_id, stock, new_cost 获得结果
SELECT inventory_logs.product_id, ROUND(SUM(inventory_logs.qty + 0), 4) AS stock
FROM products
JOIN inventory_logs on products.id = inventory_logs.product_id
WHERE inventory_logs.`type` = 'as'
AND inventory_logs.`created_at` between '1970-01-01' and '2021-02-22 23:59:59'
AND inventory_logs.`branch_id` = 1
AND inventory_logs.`deleted_at` IS NULL AND products.deleted_at IS NULL
GROUP BY inventory_logs.product_id HAVING stock > 0
以上是获取库存的查询,查询时间约为0.031秒
SELECT inventory_logs.product_id, inventory_logs.new_cost
FROM inventory_logs JOIN(
SELECT product_id, MAX(created_at) AS created_at
FROM inventory_logs
WHERE created_at <= '2021-02-22 23:59:59' AND deleted_at IS NULL
AND `type` = 'as'
AND inventory_logs.`branch_id` = 1
GROUP BY product_id
) i2 ON (inventory_logs.product_id = i2.product_id AND inventory_logs.created_at = i2.created_at)
WHERE `type` = 'as'
AND inventory_logs.`branch_id` = 1
以上是获取new_cost的查询,查询的持续时间也是0.031秒左右
但是当我尝试将上述两个查询合并为一个时,查询的持续时间是 26.016 sec 查询是
SELECT inventory_logs.product_id, ROUND(SUM(inventory_logs.qty = 0), 4) AS stock, sub.new_cost
FROM products
JOIN inventory_logs ON products.id = inventory_logs.product_id
JOIN (
SELECT inventory_logs.product_id, inventory_logs.new_cost
FROM inventory_logs JOIN (
SELECT product_id, MAX(created_at) AS created_at
FROM inventory_logs
WHERE created_at <= '2021-02-22 23:59:59' AND deleted_at IS NULL
AND `type` = 'as'
AND inventory_logs.`branch_id` = 1
GROUP BY product_id
) i2 ON (inventory_logs.product_id = i2.product_id AND inventory_logs.vreated_at
= i2.created_at)
WHERE `type` = 'as'
AND inventory_logs.`branch_id` = 1
) sub ON products.id = sub.product_id
WHERE inventory_logs.`type` = 'as'
AND inventory_logs.`created_at` BETWEEN '1970-01-01' AND '2021-02-22 23:59:59'
AND inventory_logs.`branch_id` = 1
AND inventory_logs.`deleted_at` IS NULL
AND products.deleted_at IS NULL
GROUP BY inventory_logs.product_id HAVING stock > 0
有什么方法可以优化上述查询以减少时间?
解决方案
推荐阅读
- python - Pandas:将列(价格数据)转换为整数
- label - 使用 ZPL 命令在 ZPL 打印机上打印越南语文本
- json - 尝试访问对象内的嵌套 json 对象
- bash - 在命令行输入的文本上启动 vim 的快捷方式
- python - How to search via production_id?
- vue.js - Vue:在使用 v-html 指令标记的父元素中嵌入子元素
- python - 熊猫多索引取消堆叠到单行
- java - 在 Firebase 的帮助下检索单选按钮的可绘制图像
- django - 无法使用工厂男孩 Django 进行身份验证
- npm - 未找到 postcss@1.1.5 的匹配版本