2017-05-26 24 views
0

我想知道是否有任何簡單的方法來訂購MySQL的選擇結果通過使用鍵值對提供的查詢參數?MySQL的ORDER BY鍵值對主鍵是主鍵

我有一個查詢,目前通過對多列進行排序來計算順序,其中一些列可以即時計算(來自相關表的行數)並且速度很慢。我無法緩存整個結果,因爲有很多其他篩選器可能會應用於此查詢。我想爲排序生成緩存,因爲我不需要經常更改它(它會定期失效)。我想將此訂單存儲在Redis中。所以,我有這樣的事情(ID:訂單 - 越高越好):

  • 1:39
  • 2:37
  • 3:34

有什麼辦法來完成它?或者也許只是存儲排序的ID數組(沒有順序,在這裏看起來多餘)。並以類似的方式使用?

編輯

我發現功能FIELD(<field>, values ...)這可能是我所需要的。我想我必須先測試一下,看看它是否會在查詢時間過長的情況下出現問題(因爲我也讀FIELD也很慢)。

+0

您可能想要在您的應用程序代碼中執行這種排序而不是 – Rahul

+0

@Rahul這不能完成,因爲結果使用LIMIT來拆分頁面中的數據,因此它必須在結果之前進行排序從數據庫返回。 – user1970395

回答

0

因此,在我關於MySQL的FIELD函數的調查結果發佈後,我決定測試它,就是這樣。

由於查詢的瓶頸是相關表中的數據量,因此計數被執行,該表的快速增長不斷使查詢變得越來越慢。現在,我從查詢中刪除了相關的表。而是在後臺生成順序(使用原始查詢)並緩存與表I中匹配PK的有序ID集合需要排序。

因爲新的查詢不「觸摸」相關的表,它只取決於查詢的「根」表中的行的速度和數量,這幾乎是不變的。

通過這樣做,我實現了3000%的查詢速度提升(1.5s〜0.05s〜)。