一尘不染

SQL索引性能-ASC与DESC

sql

我在自动递增的int列上键入了一个用户表,该表看起来像这样:

CREATE TABLE `user_def` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(20) NOT NULL,
  `date_created` datetime NOT NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `user_name_UNIQUE` (`user_name`),
) ENGINE=MyISAM

使用DESC索引(主键)而不是默认的ASC是否有任何实际的性能优势?

我的怀疑/推理如下:我假设更多的最近用户将变得更加活跃(即,更频繁地访问表),从而使索引更有效。

我的理解正确吗?


阅读 300

收藏
2021-03-17

共1个答案

一尘不染

更新了MySQL 8.0的答案

正如Kazimieras Aliulis在评论中指出的那样,MySQL
8.0中添加了对降序索引的支持

MySQL支持降序索引:索引定义中的DESC不再被忽略,而是导致键值以降序存储。以前,索引可以以相反的顺序进行扫描,但会降低性能。降序索引可以按向前顺序进行扫描,这样效率更高。当最有效的扫描顺序将某些列的升序与其他列的降序混合时,降序索引还使优化程序可以使用多列索引。


早期版本的原始答案

DESC索引目前尚未在MySQL中实现…引擎忽略了所提供的排序,并始终使用ASC

index_col_name规范可以以ASC或DESC结尾。这些关键字允许将来用于指定升序或降序索引值存储的扩展。目前,它们已被解析但被忽略;索引值始终按升序存储。

对于其他实现了此功能的RBDMS(例如SQL
Server),DESC规范仅在按复合索引进行排序时才有用……并且不会对新创建的用户和较旧的用户的查找时间产生影响。

2021-03-17