Les colonnes qui ne sont pas des index sont-elles triées sur disque avec index, dans MySQL, dans MyISAM et InnoDB?
Une pensée incorrecte que j'ai commencé à écrire:
Je pense que non, car ils ne sont pas indexés; s'ils étaient triés, cela signifierait qu'ils sont des index.
Ce n'est pas correct parce que chaque colonne d'index est triée par ordre de son propre contenu, mais je demande à être ordonné de chaque ligne (ou seulement de certaines colonnes) avec son index correspondant.
Pour expliquer, je dis: cela serait utile pour accélérer la sélection des plages de lignes, qui se tiennent côte à côte, ensemble, par leurs index. Par exemple, si je le veux select * where id >1000 and id<2000
(il peut y avoir des erreurs dans la syntaxe MySQL, je ne la connais pas bien), alors, la colonne id elle-même peut être lue rapidement à partir du disque car probablement ses cellules de 1000 à 2000 restent ensemble sur le disque physique . Mais d'autres contenus de colonnes correspondant aux identifiants 1000 à 2000 peuvent être écrits à différents endroits du disque physique. S'ils sont également triés, ils seront lus plus rapidement. Je pense que peut-être MySQL trie automatiquement ces colonnes sur le disque physique, pour les performances de telles opérations.
Sont-ils triés dans d'autres types de bases de données (PostgreSQL, etc.)?
27 décembre: je vois dans les 2 réponses que dans le cas où il y a un index cluster / clé primaire, les lignes simples elles-mêmes ne sont pas triées sur le disque physique (comme je pensais que cela pourrait / pourrait être), et même l'index cluster est non trié, s'il s'agit de b-tree, j'ai lu sur b-tree et je vois que ses nœuds, si je comprends bien, restent à des endroits aléatoires sur le disque.
la source