我有一个拒绝使用索引的表,它总是使用文件排序。
表格是:
创建表`文章`( `ID` int(11) NOT NULL AUTO_INCREMENT, `Category_ID` int(11) 默认 NULL, `子类别` int(11) 默认为空, `CTimestamp` 时间戳 NOT NULL DEFAULT CURRENT_TIMESTAMP, `Publish` tinyint(4) 默认为空, `Administrator_ID` int(11) 默认为 NULL, `位置` tinyint(4)默认'0', 主键(`ID`), KEY `Subcategory` (`Subcategory`,`Position`,`CTimestamp`,`Publish`), KEY `Category_ID` (`Category_ID`,`CTimestamp`,`Publish`), KEY `Position` (`Position`,`Category_ID`,`Publish`), KEY `CTimestamp` (`CTimestamp`), 约束`article_ibfk_1`外键(`Category_ID`)参考`category`(`ID`) ) 引擎=InnoDB AUTO_INCREMENT=94290 默认字符集=utf8
查询是:
SELECT * FROM article ORDER BY `CTimestamp`;
解释是:
+----+-------------+---------+------+------------- --+------+----------+------+-------+--------------- -+ | 编号 | 选择类型 | 表| 类型 | 可能的键 | 关键 | key_len | 参考 | 行 | 额外 | +----+-------------+---------+------+------------- --+------+----------+------+-------+--------------- -+ | 1 | 简单 | 文章 | 全部 | 空 | 空 | 空 | 空 | 63568 | 使用文件排序 | +----+-------------+---------+------+------------- --+------+----------+------+-------+--------------- -+
当我删除“ORDER BY”时,一切正常。所有其他索引(子类别、位置等)在其他查询中运行良好。不幸的是,即使使用我的简单选择查询,也拒绝使用时间戳。我确定我在这里遗漏了一些重要的东西。
如何让 MySQL 使用时间戳索引?
谢谢你。