我有一張拒絕使用索引的表,它總是使用filesort。MySQL在索引化的TIMESTAMP列上使用filesort
表是:
CREATE TABLE `article` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Category_ID` int(11) DEFAULT NULL, `Subcategory` int(11) DEFAULT NULL, `CTimestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `Publish` tinyint(4) DEFAULT NULL, `Administrator_ID` int(11) DEFAULT NULL, `Position` tinyint(4) DEFAULT '0', PRIMARY KEY (`ID`), KEY `Subcategory` (`Subcategory`,`Position`,`CTimestamp`,`Publish`), KEY `Category_ID` (`Category_ID`,`CTimestamp`,`Publish`), KEY `Position` (`Position`,`Category_ID`,`Publish`), KEY `CTimestamp` (`CTimestamp`), CONSTRAINT `article_ibfk_1` FOREIGN KEY (`Category_ID`) REFERENCES `category` (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=94290 DEFAULT CHARSET=utf8
查詢是:
SELECT * FROM article ORDER BY `CTimestamp`;
的解釋是:
+----+-------------+---------+------+---------------+------+---------+------+-------+----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+------+---------------+------+---------+------+-------+----------------+ | 1 | SIMPLE | article | ALL | NULL | NULL | NULL | NULL | 63568 | Using filesort | +----+-------------+---------+------+---------------+------+---------+------+-------+----------------+
當我刪除了 「ORDER BY」,那麼所有工作正常。所有其他指數(子類別,職位等)在其他查詢中工作正常。不幸的是,時間戳拒絕使用,即使使用我的簡單選擇查詢。我確信我在這裏錯過了一些重要的東西。
如何讓MySQL使用時間戳索引?
謝謝。
當您嘗試創建索引並放置您嘗試創建索引的代碼時,會出現什麼錯誤(在我的網絡中,ajax被阻止,因此我不能在那裏發表評論,這就是爲什麼我在這裏問)。 –