Maison >base de données >SQL >[SQL Learning] La connexion entre l'index ordonné et l'ordre par

[SQL Learning] La connexion entre l'index ordonné et l'ordre par

little bottle
little bottleavant
2019-04-18 10:43:104480parcourir

Généralement, il existe deux façons d'implémenter l'ordre par. La première consiste à utiliser l'index ordonné pour l'implémenter automatiquement. L'autre consiste à trier les résultats après les avoir sélectionnés. L'utilisation d'un index ordonné est bien sûr la plus rapide, mais il y a quelques restrictions. Jetons un coup d'œil au test ci-dessous.

Données de test : La table student a deux champs id et sid, id est la clé primaire. Il existe un total de 20W d'enregistrements, avec des identifiants allant de 1 à 200 000 et des sid allant également de 1 à 200 000.

La première situation :

Le champ order by n'est ni dans la condition Where ni dans la sélection

sélectionnez sid dans zhuyuehua.student où sid
[SQL Learning] La connexion entre lindex ordonné et lordre par

Deuxième cas :

commande par Le champ est pas dans la condition Where mais dans la sélection.

sélectionnez l'identifiant, le sid de zhuyuehua.student où sid
[SQL Learning] La connexion entre lindex ordonné et lordre par

Troisième cas :

Le champ order by est dans la condition Where mais pas dans la sélection.

sélectionnez sid dans zhuyuehua.student où sid
[SQL Learning] La connexion entre lindex ordonné et lordre par

La quatrième situation :

Le champ order by est dans la condition Where mais pas dans la sélection. Trier dans l'ordre inverse
Le champ de tri par n'est pas dans la condition Where et n'est pas dans la sélection Il y a une opération de tri

Le champ de order by n'est pas dans la condition Where mais est dans Select Il y a une opération de tri [SQL Learning] La connexion entre lindex ordonné et lordre par
Le champ de tri par est dans la condition Where mais pas dans la sélection Pas d'opération de tri

Le champ de order by est dans la condition Where mais pas dans le select (ordre inverse) Pas d'opération de tri

Conclusion :


Lorsque le champ order by apparaît dans la condition Where, l'index sera utilisé sans opération de tri.
Dans les autres cas, order by n'effectuera pas d'opérations de tri.

Analyse :


Pourquoi seulement lorsque le champ order by apparaît dans la condition Where, l'index de ce champ est utilisé pour éviter le tri. Il s'agit de la façon dont la base de données obtient les données dont nous avons besoin.
Un SQL peut en fait être divisé en trois étapes.

1. Obtenir des données
2.
3. Renvoyez les données traitées

Par exemple, l'instruction ci-dessus sélectionne sid de zhuyuehua.student où sid
Étape 1 : générer une exécution en fonction de la condition Where et des informations statistiques Planifiez, obtenez des données.

Étape 2 : Triez les données obtenues.


Lors de l'exécution du traitement des données (order by), la base de données vérifiera d'abord le plan d'exécution de la première étape pour voir si le champ order by utilise un index dans le plan d'exécution. Si tel est le cas, vous pouvez utiliser l'ordre d'indexation pour obtenir directement les données triées.
Sinon, opération de tri.

Étape 3 : Renvoyez les données triées.

Aussi :
Le tri des 50 000 données ci-dessus n'a pris que 25 ms. Peut-être pensez-vous que le tri ne prend pas beaucoup de ressources. Cependant, étant donné que les données du tableau ci-dessus sont ordonnées, le tri prend moins de temps. S'il s'agit d'une table relativement désordonnée, le temps de tri augmentera considérablement. De plus, les opérations de tri sont généralement effectuées en mémoire, ce qui représente une sorte de consommation de CPU pour la base de données. En raison des performances améliorées du CPU, le tri ordinaire de dizaines ou de centaines d'enregistrements n'aura pas un grand impact sur le système. . Mais lorsque votre jeu d'enregistrements atteint plus d'un million d'enregistrements, vous devez faire attention à savoir si vous devez le faire. Le tri de grands jeux d'enregistrements augmente non seulement la surcharge du processeur, mais peut également entraîner un tri du disque dur en raison d'une mémoire insuffisante. le disque dur se produit. Les performances chutent considérablement lors du tri.
Remarque : ORACLE ou DB2 disposent d'un espace pour les opérations de SORT (le tri de la mémoire mentionné ci-dessus). Par exemple, dans ORACLE, il s'agit de la zone globale utilisateur (UGA), qui contient les paramètres de paramètres tels que SORT_AREA_SIZE. Si la quantité de données à trier est importante, un débordement de tri (tri du disque dur) se produira et les performances seront considérablement réduites.

Résumé :




Lorsque les champs classés par apparaissent dans la condition Where, l'index sera utilisé sans tri. Pour être plus précis, les champs classés par sont dans le plan d'exécution. Lors de l’utilisation d’index, aucune opération de tri n’est requise.



Cette conclusion est valable non seulement pour le tri par, mais également pour d'autres opérations qui nécessitent un tri. Par exemple, regrouper par, union, distinct, etc.

Si vous souhaitez en savoir plus sur SQL, veuillez faire attention au site Web PHP chinois Tutoriel vidéo SQL !


  • [SQL Learning] La connexion entre lindex ordonné et lordre par
  • Taille : 16 Ko
  • [SQL Learning] La connexion entre lindex ordonné et lordre par
  • Taille : 16 Ko
  • [SQL Learning] La connexion entre lindex ordonné et lordre par
  • Taille : 20,6 Ko
  • [SQL Learning] La connexion entre lindex ordonné et lordre par
  • : 21 Ko

    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!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer