Maison > Article > base de données > Cet article explique comment Mysql renvoie les résultats en fonction de l'ordre des valeurs d'ID.
J'ai rencontré un problème aujourd'hui, c'est-à-dire qu'il y a une requête qui doit renvoyer l'ensemble de résultats dans l'ordre de la valeur d'ID spécifiée. En fait, elle peut également être placée dans le programme pour le tri, mais j'ai soudainement voulu voir. si je pouvais utiliser directement Mysql pour interroger et renvoyer directement, j'ai donc cherché de l'aide pour l'implémentation de la fonction.
Fonction Field()
Mysql fournit une fonction Field() qui peut personnaliser le tri dans l'ordre que nous donnons
Exemple :
Supposons qu'il existe une table d'informations sur la ville appelée régions avec un identifiant de clé primaire et un nom nom de l'attribut, maintenant je veux interroger les ID 2, 3, 1 et les renvoyer dans cet ordre
<p>select id, name from regions;#id name<br> 1 北京 2 上海 3 深圳<br></p>
Utiliser le champ()
<p>select id, name from regions order by field(id, 2, 3, 1);#id name<br> 2 上海 3 深圳 1 北京<br></p>
Cela permettra d'atteindre l'objectif de tri dans un ordre personnalisé
Performance
<p>mysql> explain select id from regions order by field(id, 2, 3, 1);+---+-------------+---------+------+---------------+-----+---------+-----+------+-----------------------------+|id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra ||-- | ----------- | ------- | ---- | ------------- | --- | ------- | --- | ---- | ----------------------------| |1 | SIMPLE | regions | index| NULL | id | 4 | NULL| 3 | Using index; Using filesort |+---+-------------+---------+------+---------------+-----+---------+-----+------+-----------------------------+<br></p>
Parce que lorsque nous utilisons Order By Field, nous spécifions que la clé primaire est triée en fonction de l'ID de clé primaire. Il existe un index de clé primaire qui utilisera l'ID pour rechercher les enregistrements avec des conditions égales à 2, 3, 1. peut voir qu'il y a un using index dans Extra. Si vous passez à un autre champ non indexé, il ne sera pas là. La clause Order By ne peut pas utiliser cet index et ne peut utiliser que le tri Filesort, c'est pourquoi il y a Using filesort dans Extra
Le processus approximatif est le suivant :
Commencez à partir du premier nœud feuille de l'index d'identification et analysez tout nœuds feuilles dans l'ordre
Accédez à l'index de clé primaire (index clusterisé) en fonction de l'identifiant de clé primaire enregistré dans chaque nœud feuille pour trouver les données de ligne réelles
Déterminez si les données de ligne remplissent les conditions d'id = 2, 3, 1. S'il répond, retirez-le et retournez
Principes de base Après avoir parcouru toute la table, certaines personnes ont dit qu'il recherchait l'identifiant de l'enregistrement sélectionné dans la liste FIELD et renvoyait la position, en utilisant la position comme base de tri.
Une telle utilisation entraînera l'utilisation de Filesort (bien sûr, utiliser Filesort n'est pas nécessairement plus lent, parfois c'est plus rapide que de ne pas l'utiliser), ce qui est une méthode de tri très inefficace.
Habituellement, la clause ORDER BY est combinée avec la clause LIMIT pour récupérer uniquement une partie des lignes. Si vous triez toutes les lignes uniquement pour supprimer la première ligne, ce n’est évidemment pas une approche efficace. La fonction
Résumé
Field() peut nous aider à effectuer directement certains tris requis au niveau de la couche de base de données et à simplifier le code métier, mais en même temps, elle aura également des problèmes de compatibilité et de performances. Il est recommandé de l'utiliser lorsque. la fréquence des modifications des données est faible ou les données sont longues. Cache temporel, et lorsque la quantité de données est importante, vous pouvez utiliser la base de données pour interroger les données et les trier dans le programme. Apprentissage recommandé : "
Tutoriel vidéo mysql. "
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!