簡體   English   中英

如何避免此 mysql 查詢的文件排序

[英]How to avoid filesort for this mysql query

我需要一些幫助來避免對這個查詢進行文件排序。

  SELECT id 
    FROM articles USE INDEX(group)
   WHERE type = '4' 
     AND category = '161' 
     AND did < '10016' 
     AND id < '9869788' 
ORDER BY id DESC 
   LIMIT 10

INDEX(group) 是 ( type , category , did , id ) 的覆蓋索引

由於ORDER BY id DESC ,執行文件排序。 有沒有辦法避免對此類查詢進行文件排序?

更改索引列順序。 該索引對排序沒有用處,因為它是第 4 列並且還沒有准備好按原樣使用。

當然,這會影響索引對這個 WHERE 的有用性,因為在相等列之前需要一個不等列

MySQL 文檔中,您打破了“您在鍵的非連續部分上使用 ORDER BY”和“用於獲取行的鍵與 ORDER BY 中使用的鍵不同”

編輯:根據我上面的鏈接,您不能擁有同時滿足 WHERE 和 ORDER BY 的索引。 由於我在上面發布的兩個條件,它們是互斥的

另一個建議:

  • id 上的單列索引
  • go 也回到原來的索引
  • 刪除索引提示
  • 希望優化器解決兩個索引都可以使用(“索引交集”)

在 id 上創建索引並鍵入它應該適合您。 如果 Id 是唯一的,您還可以為其創建主鍵。

您的查詢正在使用文件排序,因為優化器可能正在使用您在查詢中創建的索引的第一列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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