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

Indexation pour la pagination du jeu de clés dans mysql

J'ai déjà rencontré ce problème. Voici mon analyse.

  • Cela se produit dans MySQL 5.7 et 8.0, mais apparemment pas dans les anciennes versions et pas dans MariaDB.

  • La "solution" que je préfère est de changer les index ainsi :

       INDEX(company_id)      -- DROP this
       INDEX(company_id, id)  -- ADD this
    

Bien que l'index à 2 colonnes soit théoriquement identique à l'index à une colonne pour InnoDB (en supposant que id est le PK`), l'optimiseur semble ignorer ce fait dans certaines situations .

De plus, j'aime ajouter explicitement le PK lorsque je vois un besoin . Cela signale aux futurs lecteurs du schéma (y compris moi-même) que certaines requêtes bénéficient de l'ajout de la PK.

Je n'ai pas encore trouvé de cas où "l'intersection de fusion d'index" est plus rapide qu'un index composite équivalent.

Je n'aime jamais utiliser des "indices" d'index de peur que la distribution des données ne change à l'avenir et que mon "indice" n'aggrave les choses.