Mysql

重新排序表行是否會減少使用 ORDER BY 子句進行後續排序的時間?

  • February 2, 2020

通過更改表行的順序以匹配ORDER BY慢速選擇中的預期順序是否有任何執行時優勢?

(假設唯一的字母數字索引並且如果這些問題沒有自動增量)

不,它不會有所作為。無論行的順序如何,您都使用相同的記錄進行查詢和排序。我敢肯定,如果您的查詢執行緩慢,可以評估其他調整指標。

您的問題是關於後續的ORDER BY. 答案是不”。另一方面,讓我給你一個“性能”可能會提高的案例。

  • 在 MyISAM 中,ALTER TABLE .. ORDER BY ..是一個有效的選項。它改變了“參考位置”。在極少數情況下,它是有益的。
  • 在 InnoDB 中,ALTER如果你有一個PRIMARY KEY. PK 定義了表的 BTree 中行的順序;這ALTER不能打敗它。
  • 在 InnoDB 中,您可以創建一個沒有 的表PRIMARY KEY,但會為您提供一個。讓我們不要進入那個;不應該這樣做。

這是“參考位置”可以產生一些影響的一個範例。假設您有一個巨大的表(比 buffer_pool 大),其中包含有關使用者照片的元資訊。

備選方案 1: PRIMARY KEY(photo_id)在一張巨大的照片桌上。由於照片是隨機到達的,因此單個使用者的照片將分散在整個表格中。

備選方案 2: PRIMARY KEY(user_id, photo_id), INDEX(photo_id)– 同一張表。現在單個使用者的所有照片都聚集在一起。

另外,我們假設大多數查詢都像SELECT ... WHERE user_id = 123 AND .... 如果 aSELECT返回數百或行,則案例 2 會更快,因為集群會導致更少的磁碟讀取

引用自:https://dba.stackexchange.com/questions/258646