[英]Using filesort to order by price column in MySQL
我有一個查詢,比這個查詢要復雜一些(得到最便宜的價格),但這表示性能問題很好。 因此查詢無法更改。
我嘗試創建不同的索引來加快訂購速度,但不走運。
需要什么索引才能使此1.4秒持久查詢更快? 如果我刪除ORDER BY,查詢將持續0.05秒,但我需要進行排序。
詢問
SELECT id AS pid
FROM prices pt
WHERE pt.id = (
SELECT pt2.id
FROM prices pt2
WHERE pt2.oid=pt.oid
ORDER BY pt2.price
LIMIT 1
)
說明
1 PRIMARY pt index NULL id_price 12 NULL 9144 Using where; Using index
2 DEPENDENT SUBQUERY pt2 ref oid,oid_price oid 4 oid 23 Using where; Using filesort
索引
PRIMARY PRIMARY 9144 id
price INDEX 703 price
oid INDEX 397 oid
id_price INDEX 9144 id,price,oid
oid_price INDEX 4572 oid,price
查詢很少更改是非常罕見的。 沒有看到原件,很難確定。 例如,您似乎正在嘗試獲取ID列表,其中這些ID是其“ oid”的最低價格。
您作為示例給出的查詢可以很容易地重寫為不需要相關的子查詢。 相關子查詢通常是性能問題的根源。
SELECT p.id
FROM (SELECT oid, MIN(price) AS minPrice FROM prices GROUP BY oid) AS mins
INNER JOIN prices AS p ON mins.oid = p.oid AND mins.minPrice = p.price
;
要快速進行上述查詢,就可能需要有一個索引(oid,價格)。
注意:結果的唯一區別應該是,如果有多個條目的價格最小,則可以為同一個oid
值返回多個id
值; 而不是有效地隨機選擇價格最低的id
值之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.