重写sql查询以获得更好的优化



我有一个表,它有以下数据

<表类> id orderid tbody><<tr>101112203031

你可以这样试试

SELECT id
FROM yourTable
GROUP BY id
HAVING count(*)=1
and max(orderid)=0;

如果您想采用聚合方法,我更喜欢:

SELECT id
FROM yourTable
GROUP BY id
HAVING MIN(orderid) = MAX(orderid) AND MIN(orderid) = 0;

这个查询应该受益于(id, groupid)上的索引。

我的答案没有选择groupid值,但是我们已经知道这个值对于整个结果集必须为零。

如果你知道/orderid的顺序将始终是0,1,2等,并且你有一个索引(id, orderid),我将自连接,所以它不需要查询那些可能有100多个订单的id

select
yt.id
from
YourTable yt
LEFT JOIN YourTable yt2
on yt.id = yt2.id
and yt2.orderid = 1
where
yt.orderid = 0
AND yt2.id is null

所以它将只关心订单ID = 0或1,并且只返回那些没有找到orderID = 1的订单。

最新更新