在 MySQL、MyISAM 和 InnoDB 中,不是索引的列是否与索引一起在磁盘上排序?
我开始写的一个错误想法:
我认为可能不是,因为它们没有被编入索引;如果它们被排序,那将意味着它们是索引。
这是不正确的,因为每个索引列都是按其自己的内容顺序排序的,但我问的是每行(或仅某些列)及其相应索引的排序。
为了解释一下,我说:这对于通过索引更快地选择并排的行范围很有用。例如,如果我想select * where id >1000 and id<2000(可能是 MySQL 语法有错误,我不太了解),那么 id 列本身可以从磁盘中快速读取,因为它的单元格从 1000 到 2000 可能在物理磁盘上保持在一起. 但是id 1000到2000对应的其他列内容可能会写在物理磁盘的不同位置。如果它们也被排序,它们将被更快地读取。我想,也许 MySQL 会自动对物理磁盘上的列进行排序,以实现此类操作的性能。
它们是否在其他类型的数据库(PostgreSQL 等)中排序?
12 月 27 日:我从 2 个答案中看到,在存在聚集索引/主键的情况下,简单行本身不会在物理磁盘上排序(正如我认为的那样),甚至聚集索引也是未排序,如果它是 b 树,我已经阅读了有关 b 树的内容,并看到它的节点,据我所知,位于磁盘上的随机位置。