Mysql
重新排序表行是否會減少使用 ORDER BY 子句進行後續排序的時間?
通過更改表行的順序以匹配
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 會更快,因為集群會導致更少的磁碟讀取。