编程知识 cdmana.com

MySQL Real Game 45 talk Learning notes (7)

count(*) Problème de vitesse

  1. MyISAM Le moteur a le nombre total de lignes d'une table sur le disque,Mise en œuvre count() Renvoie ce nombre directement
  2. InnoDB Exécution du moteur count() Quand,Les données doivent être lues ligne par ligne à partir du moteur,Puis le nombre cumulatif
    innodbEn raison du contrôle de la concurrence Multi - Versions(MVCC)Raisons,Opérations multiplescountLe nombre de lignes est différent,Impossible d'enregistrer le nombre total de lignes.
    Mais...count(*)Optimisé,Le moteur sélectionne le plus petit arbre d'index normal,Comptez..Au lieu de compter directement l'arbre d'index groupé.

AméliorationcountPerformance

Enregistrer les comptes avec le système de cache

Inconvénients:

  1. Le cache est perdu
  2. Cache inexact,Parce que le comptage du cache et l'insertion des données ne sont pas des opérations atomiques,Il est possible qu'au milieu du processus,D'autres transactions ont lu les données.

Compter dans la base de données

Peut résoudre le problème de la vue de cohérence

C'est différent.countUtilisation

  1. Pour count(Clé primaire id) Dis,InnoDB Le moteur parcourra toute la table,Prenez chaque ligne id Prenez toutes les valeurs.,Retour server Couche.server Couche - toi. id Après,Le jugement ne peut pas être vide,Additionnez par ligne..
  2. Pour count(1) Dis,InnoDB Le moteur traverse toute la table,Mais pas de valeur.server Couche pour chaque ligne retournée,Mettez un chiffre“1”Entrez.,Le jugement ne peut pas être vide,Cumul par ligne.
    count(1) Plus que count(Clé primaire id) Allez. Retour du moteur id Il s'agit de résoudre les lignes de données,Et copier les valeurs des champs
  3. Pour count(Champ) Dis:
    Si ça“Champ”Est défini comme not null Et si,Lisez ce champ ligne par ligne à partir de l'enregistrement,Le jugement ne peut pas être null,Cumul par ligne;
    Si ça“Champ”La définition est autorisée comme suit: null,Alors, quand on l'exécute,,J'ai pensé que c'était possible. null,Encore une fois, il faut prendre la valeur et la juger,Non, pas du tout. null C'est une accumulation..
  4. count(),N'enlève pas tous les champs,Il a été optimisé.,Aucune valeur.count() Je suis sûre que non. null,Cumul par ligne
    Par efficacité,count(Champ)<count(Clé primaire id<count(1)≈count(), Il est donc recommandé d'utiliser autant que possible count().

版权声明
本文为[Ordinaryblog]所创,转载请带上原文链接,感谢
https://cdmana.com/2022/01/202201080600349480.html

Scroll to Top