MySQL与MariaDB中二级索引指定主键排序顺序的有效性疑问
InnoDB二级索引指定主键降序的合法性与显示问题
核心结论
你执行的CREATE INDEX idx_employee_id_id_desc ON t1 (employee_id, id DESC);语句在MySQL 5.7.25和MariaDB 10.6.15中均是合法允许的,SHOW INDEX显示id为升序(标识'A')属于工具显示的误导性问题,实际索引的排序逻辑符合你的要求。
MySQL 5.7.25 细节
- 该版本完全支持在二级索引中显式指定主键列的排序方向,创建索引的语句可以正常执行,无语法或功能报错。
SHOW INDEX的Collation列显示'A'(升序)是工具的局限性:InnoDB二级索引中,主键列的排序方向不会被该命令单独展示,但实际上相同employee_id的记录已按id降序存储。- 验证方法:执行
EXPLAIN SELECT * FROM t1 WHERE employee_id = 1 ORDER BY id DESC;,若Extra列无Using filesort,说明优化器直接利用该索引完成排序,证明索引的降序逻辑生效。
MariaDB 10.6.15 细节
- 该版本同样支持该索引创建语法,操作完全合法。
- 与MySQL类似,
SHOW INDEX的显示存在同样的问题:Collation列显示'A',但实际索引内部已按id DESC排序相同employee_id的记录。 - 验证方式一致:通过
EXPLAIN查看对应排序查询的执行计划,若无Using filesort则说明索引符合预期。
显示异常的原因
InnoDB的二级索引默认会包含主键列,当你显式指定主键列的排序方向时,SHOW INDEX工具并未针对这种场景做特殊处理,而是沿用了主键本身的排序标识(主键id为升序,故显示'A'),但实际索引的存储顺序已经按照你指定的规则调整。
内容的提问来源于stack exchange,提问作者George Lu
相关产品推荐
相关产品推荐

