【发布时间】:2014-10-28 13:20:42
【问题描述】:
我有以下疑问:
SELECT driver_id, first_name, last_name
FROM drivers
WHERE driver_id NOT IN
(SELECT DISTINCT w.driver_id from waybills w
JOIN drivers d ON d.driver_id = w.driver_id
WHERE w.waybill_owner = 1
AND w.waybill_status = 'dispatched'
AND w.delivery_date = '2014-10-28')
AND driver_id NOT IN
(SELECT DISTINCT wm.driver_id from waybill_movements wm
JOIN drivers d ON d.driver_id = wm.driver_id
WHERE wm.movement_owner = 1
AND wm.delivery_date = '2014-10-28')
AND status = 'active'
AND driver_owner = 1
ORDER BY last_name ASC
如何优化这个查询?
查询运行良好并返回预期结果,但我的问题是查询是否可以优化。
非常感谢您的时间和帮助。
更新:
而且,是的,我有这些索引:
运单(waybill_owner, waybill_status, w.delivery_date) waybill_movements (wm.movement_owner, delivery_date) 驱动程序(驱动程序 ID 主键和驱动程序(状态,驱动程序所有者)
表结构不需要优化
没想到会有这么多答案。谢谢大家。
【问题讨论】:
-
如果查询运行良好且结果正确,为什么还要进一步优化?您正在解决一个并非真正问题的问题。
-
查询非常复杂,“解释”使用文件排序,许多临时表意味着使用大量内存和磁盘空间,因此需要优化。
-
那你为什么这么说
Query works well and return expected results你说效果很好,这通常意味着它运行得很快并且不会抛出错误。 -
编写复杂的 SQL 查询很容易。优化查询需要专家技能。我要的。
-
@Kris,显然可以对此查询进行一些改进以进行优化,而无需进入 EXPLAIN 并打扰索引(我也强烈鼓励 OP 确保为更快的查询做好准备) .