我想讓MySQL使用索引對這些行進行排序。MySQL ORDER BY範圍優化
SELECT
identity_ID
FROM
identity
WHERE
identity_modified > 1257140905
ORDER BY
identity_modified
但是,這是使用文件排序(不受歡迎)。
現在,如果我在此放棄ORDER BY子句,那麼僅僅因爲使用索引來滿足WHERE子句而將行排序爲。
因此,我可以通過關閉WHERE子句來獲得我想要的行爲,但是我依靠MySQL的行爲來保持行的一致性,並且如果MySQL發生更改,將來可能會出現問題其內部行爲。
我該怎麼辦?任何告訴MySQL的方式,因爲索引是按順序存儲的(b-tree),它不需要這個文件夾?
表看起來像這樣(簡化):
CREATE TABLE IF NOT EXISTS `identity` (
`identity_ID` int(11) NOT NULL auto_increment,
`identity_modified` int(11) NOT NULL,
PRIMARY KEY (`identity_ID`),
KEY `identity_modified` (`identity_modified`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
讓我在這裏清楚我的理解,你想排序identity_modified,但不是其他領域?或即時錯過了點 – Treby 2009-11-11 05:42:14
重點是,我想檢索自某個日期以來修改的所有記錄,按它們上次修改的日期排序。我不希望MySQL必須爲此做一個文件夾;它可能需要對大部分表格進行排序。由於MySQL按順序存儲索引行,因此不應該使用文件夾。 – thomasrutter 2009-11-11 05:48:57
你可以發佈這個查詢的解釋和沒有秩序和。對我來說,它要麼進行全面掃描和排序,要麼使用索引而不排序(取決於提取的記錄數量)。 – Pomyk 2009-11-18 10:25:00