我有一张数据表。该表有订单条目,每个订单都有一些类型(或状态,例如订购,......,抛光,包装,发货)。
现在,我想做这个查询。
select * from orders as o
where not exists
(SELECT * from orders as oo
where
o.order = oo.order and
oo.type="SHIPMENT")
类型和货件有一个索引,但它仅在完成全扫描后使用。所以查询需要很长时间。我想直接提供数据。
答案 0 :(得分:0)
在orders.type
上建立索引并不一定意味着将使用此索引。实际上,如果索引不够有选择性,则不使用该索引。此外,如果使用NOT IN
或LEFT JOIN/IS NULL
方法而不是NOT EXISTS
,mysql的工作速度会更快:
// LEFT JOIN/IS NULL:
SELECT o.*
FROM orders o
LEFT JOIN orders oo ON (oo.order = o.order AND oo.type="SHIPMENT")
WHERE oo.id IS NULL