簡體   English   中英

在MySQL中使用Filesort按價格列排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM