[英]mysql select Where (subquery) IN
我有一個類型的mysql查詢
select some_value FROM table WHERE (subquery) IN ( values )
這似乎太慢了!
我有一個帶有訂單的mysql表,第二個帶有它們的相應處理狀態的表。 現在,我要顯示所有具有最后狀態代碼= 1的訂單。
表順序(ID =主鍵)
id | value
---+-------
1 + 10
2 + 12
3 + 14
表狀態(id =主鍵)
id | orderid | code
---+---------+-------
1 + 1 + 1
2 + 2 + 1
3 + 2 + 2
4 + 1 + 3
5 + 3 + 1
我的查詢是:
select order.id FROM order WHERE
( select state.code FROM state WHERE state.orderid = order.id ORDER BY state.id DESC LIMIT 0,1 ) IN ( '1' )
單個訂單處理大約需要15秒。 如何修改mysql語句以加快查詢處理時間?
更新
試試這個:
select s1.orderid
from state s1
left outer join state s2 on s1.orderid = s2.orderid
and s2.id > s1.id
where s1.code = 1
and s2.id is null
您可能需要在state.orderid
上state.orderid
索引。
CREATE TABLE state
(`id` int, `orderid` int, `code` int)
;
INSERT INTO state
(`id`, `orderid`, `code`)
VALUES
(1, 1, 1),
(2, 2, 1),
(3, 2, 2),
(4, 1, 3),
(5, 3, 1)
;
查詢 :
select s1.orderid
from state s1
left outer join state s2 on s1.orderid = s2.orderid
and s2.id > s1.id
where s1.code = 1
and s2.id is null
結果 :
| ORDERID |
|---------|
| 3 |
在這種情況下,我想您可能會忘記order
,因為所有信息都保持state
。
SELECT x.id, x.orderid
FROM state AS x
WHERE x.code =1
AND x.id = (
SELECT max( id )
FROM a
WHERE orderid = x.orderid )
也許也可以通過將最后一個狀態直接放在order
表中來更改您的CRUD
,這會更好
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.