Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi MySQL n'utilise-t-il pas d'index pour une comparaison supérieure à ?

Vous feriez probablement mieux de laisser MySql décider du plan de requête. Il y a de fortes chances qu'un parcours d'index soit moins efficace qu'un parcours complet de table.

Il y a deux structures de données sur le disque pour cette table

  1. La table elle-même ; et
  2. L'index B-Tree de clé primaire.

Lorsque vous exécutez une requête, l'optimiseur dispose de deux options pour accéder aux données :

SELECT * FROM userapplication WHERE application_id > 1025;

Utilisation de l'index

  1. Scanner l'index B-Tree pour trouver l'adresse de toutes les lignes où application_id > 1025
  2. Lisez les pages appropriées du tableau pour obtenir les données de ces lignes.

Ne pas utiliser l'Index

Parcourez l'intégralité du tableau et sélectionnez les enregistrements appropriés.

Choisir la meilleure stratégie

Le travail de l'optimiseur de requête consiste à choisir la stratégie la plus efficace pour obtenir les données souhaitées. S'il y a beaucoup de lignes avec un application_id > 1025 alors il peut en fait être moins efficace d'utiliser l'index. Par exemple si 90 % des enregistrements ont un application_id > 1025 l'optimiseur de requête devrait alors analyser environ 90 % des nœuds feuilles de l'index b-tree, puis lire au moins 90 % de la table également pour obtenir les données réelles ; cela impliquerait de lire plus de données sur le disque que de simplement parcourir la table.