C'est probablement simple, mais je n'arrive pas à trouver la réponse.
J'essaie de minimiser les frais généraux liés à la sélection des enregistrements en utilisant ORDER BY.
Je crois savoir que dans...
SELECT gorilla, chimp FROM apes ORDER BY bananas LIMIT 10;
...le jeu complet d'enregistrements correspondants est récupéré afin que le ORDER BY puisse être exécuté, même si je ne veux que les dix premiers enregistrements. C'est logique.
Pour essayer d'éliminer cette surcharge, j'ai envisagé la possibilité de stocker les enregistrements dans un ordre prédéfini, mais cela ne fonctionnerait que jusqu'à ce que des insertions/suppressions aient lieu, après quoi je devrais reconstruire la table. Pas viable.
J'ai trouvé une option dans SQLite (je suppose qu'elle existe aussi dans d'autres SQLs) pour créer un index trié ( https://www.sqlite.org/lang_createindex.html )...
CREATE INDEX index_name ON apes (bananas DESC);
...que je ASSUME pour signifier que l'index (et non la table) est trié par ordre décroissant et le restera après les mises à jour .
Ma question est la suivante : comment puis-je exploiter cette situation ? La documentation de SQLite est un peu terne à cet égard. Existe-t-il une sorte de "SELECT FROM index" ou un équivalent ? Ou est-ce que le fait qu'un index trié existe sur une colonne signifie que tous les résultats de la requête sur cette colonne seront retournés dans l'ordre de l'index plutôt que dans l'ordre de la colonne ?
Ou est-ce que je rate quelque chose ?
Je travaille avec SQLite3, interrogé par PHP 7.1.