Récemment, j'expliquais à mes collègues l'importance d'avoir une colonne permettant de trier les données dans une table de base de données si cela est nécessaire, par exemple pour les données classées chronologiquement. Cela s'est révélé quelque peu difficile car ils pouvaient simplement réexécuter leur requête en apparence sans fin et cela renvoyait toujours le même ensemble de lignes dans le même ordre.
J'ai déjà remarqué cela et tout ce que je pouvais vraiment faire, c'est insister pour qu'ils me fassent confiance et ne pas simplement supposer qu'une table de base de données se comportera comme un fichier CSV ou Excel traditionnel.
Par exemple, exécuter la requête (PostgreSQL)
create table mytable (
id INTEGER PRIMARY KEY,
data TEXT
);
INSERT INTO mytable VALUES
(0, 'a'),
(1, 'b'),
(2, 'c'),
(3, 'd'),
(4, 'e'),
(5, 'f'),
(6, 'g'),
(7, 'h'),
(8, 'i'),
(9, 'j');
va créer un tableau avec un ordre conceptuel clair. La sélection de ces mêmes données de la manière la plus simple serait:
SELECT * FROM mytable;
Me donne toujours les résultats suivants:
id | data
----+------
0 | a
1 | b
2 | c
3 | d
4 | e
5 | f
6 | g
7 | h
8 | i
9 | j
(10 rows)
Je peux le faire encore et encore et il me renverra toujours les mêmes données dans le même ordre. Cependant, je sais que cet ordre implicite peut être rompu, je l'ai déjà vu, en particulier dans les grands ensembles de données, où une valeur aléatoire sera apparemment jetée au «mauvais» endroit lorsqu'elle est sélectionnée. Mais il m'est venu à l'esprit que je ne sais pas comment cela se produit ni comment le reproduire. J'ai du mal à obtenir des résultats sur Google, car la requête de recherche a tendance à renvoyer une aide générale sur le tri des jeux de résultats.
Donc, mes questions sont essentiellement les suivantes:
Comment puis-je prouver de façon concrète et concrète que l'ordre de retour des lignes d'une requête sans
ORDER BY
instruction n'est pas fiable, de préférence en provoquant et en montrant une ventilation de l'ordre implicite même lorsque la table en question n'est pas mise à jour ou modifiée ?Cela fait-il une différence si les données ne sont insérées qu'une seule fois en masse et ne sont plus jamais mises à jour?
Je préférerais une réponse basée sur les post-gres car c'est celle que je connais le mieux mais je suis plus intéressé par la théorie elle-même.
order by
clause à leurs requêtes? Essayent-ils d'économiser sur le stockage du code source? l'usure du clavier? le temps qu'il faut pour taper la clause redoutée?