Questions d'entrevue dans la base de données MySQL (dernière version 2021)

Sun zhongming 2021-10-14 04:45:48
questions entrevue dans la base


Marquer la partie clé

Catalogue des articles

MySQL Quelle est la différence entre les moteurs de stockage couramment utilisés ?()

Les moteurs de stockage couramment utilisés sont les suivants: :

  • InnodbMoteur:InnodbLe moteur fournit une base de donnéesACIDSoutien aux transactions.Et fournit également des contraintes pour les serrures de niveau de ligne et les clés étrangères.Il est conçu pour traiter un système de base de données de grande capacité.
  • MyIASMMoteur(À l'origineMysqlMoteur par défaut pour):Ne pas fournir de soutien transactionnel,Les serrures de niveau de ligne et les clés étrangères ne sont pas non plus prises en charge.
  • MEMORYMoteur: Toutes les données sont en mémoire , Traitement rapide des données , Mais la sécurité n'est pas élevée .

MyISAMAvecInnoDBLa différence

MyISAM Innodb
Structure de stockage Chaque tableau est stocké dans trois fichiers :
frm Définitions des tableaux 、MYD(MYData)Fichiers de données、
MYI(MYIndex)-Fichier index
Toutes les tables sont sauvegardées dans le même fichier de données.ibd frm Définitions des tableaux 、(Ou peut - être plusieurs fichiers,Ou un fichier TABLESPACE autonome),InnoDBLa taille du tableau est limitée à la taille des fichiers du système d'exploitation,En général2GB
Espace de stockage MyISAMCompressible,Espace de stockage plus petit InnoDB La table pour a besoin de plus de mémoire et de stockage , Il sera dans le Seigneur Mémoire Pour créer son propre Pool tamponPour la mise en cacheDonnées et index
Portabilité、Sauvegarde et récupération Parce queMyISAM Les données de Stockage sous forme de fichier Stockage,Il est donc facile de transférer des données entre les plateformes.Une table peut être manipulée individuellement lors de la sauvegarde et de la récupération La solution gratuite peut être de copier des fichiers de données、Sauvegarde binlog,Ou avec mysqldump,Des dizaines de donnéesGC'est plutôt douloureux.
Format du fichier Les données et les index sont stockés séparément ,Données.MYD,Index.MYI Les données et les index sont stockés centralement,.ibd
Ordre de stockage des enregistrements Enregistrer dans l'ordre d'insertion des enregistrements Insertion ordonnée par la taille de la clé primaire
Clé étrangère Non pris en charge Soutien
Services Non pris en charge Soutien
Support de verrouillage ( Le verrouillage est un mécanisme pour éviter les conflits de ressources ,MySQL La serrure est presque transparente pour l'utilisateur ) Verrouillage au niveau de la table Verrouillage au niveau de la rangée、Verrouillage au niveau de la table, Faible force de verrouillage et haute capacité simultanée
SELECT MyISAMMieux
INSERT、UPDATE、DELETE InnoDBMieux
select count(*) myisamPlus vite.,Parce quemyisamUn compteur est maintenu en interne,Accès direct.
Mise en œuvre de l'index B+Index des arbres,myisam C'est une pile. B+Index des arbres,Innodb Est l'Organisation de l'index
Index de hachage Non pris en charge Soutien
Index texte complet Soutien Non pris en charge

Résumé

  • InnoDB L'index est un index groupé ,MyISAM L'index est un index non groupé .
  • InnoDB Le noeud de feuille de l'index de clé primaire de Données de ligne, L'index des clés primaires est donc très efficace .
  • MyISAM Les noeuds foliaires de l'index stockent Adresse des données de ligne ,Besoin Redirection Les données ne sont disponibles qu'une seule fois .
  • InnoDB Les noeuds foliaires qui ne sont pas des index clés primaires stockent Clés primaires et autres indexées Données de colonne pour, Il est donc très efficace d'écraser l'index lors de la requête .

Pourquoi utiliser l'index ?

L'index estUne structure de données.Index des bases de données, Est la valeur d'une ou de plusieurs colonnes Pré - tri Structure des données pour.En utilisant l'index, Permet au système de base de données de ne pas numériser la table entière , Au lieu de cela, il se dirige directement vers les dossiers admissibles. , Cela accélère considérablement les requêtes .

Plus populaire, L'indice est égal à Table des matières. Pour faciliter la recherche du contenu du livre , Catalogage par indexation du contenu .L'index est un fichier, Il est destiné à occuper l'espace physique .

L'index est utilisé pour trouver rapidement les enregistrements qui ont des valeurs spécifiques .S'il n'y a pas d'index, En général, la table entière est traversée lors de l'exécution d'une requête .

Le principe de l'indexation est simple , Est de transformer des données désordonnées en requêtes ordonnées

  1. Trier le contenu des colonnes indexées
  2. Générer un tableau inversé des résultats de tri
  3. Assembler la chaîne d'adresses de données sur le contenu du tableau inversé
  4. Lors de la requête, Obtenez d'abord le contenu de la liste inversée , Puis retirez la chaîne d'adresses de données , Pour obtenir des données précises

Avantages:

  • C'est énorme. Accélérer la récupération des données .
  • Sera aléatoireI/ODans l'ordreI/O(Parce queB+Les noeuds foliaires de l'arbre sont reliés)
  • Connexion entre l'accéléromètre et le compteur

Inconvénients:

  • Du point de vue spatial, L'indexation est nécessaire Espace physique
  • Du point de vue du temps Consideration,La création et la maintenance d'index prennent du temps, Par exemple, les données L'index doit être maintenu lors de l'ajout, de la suppression et de la modification. .

Quels sont les algorithmes d'indexation ?()

L'algorithme d'indexation a BTreeAlgorithmes etHashAlgorithmes

  • B+Index des arbres

Les étudiants qui connaissent bien la structure des données le savent.,B+Arbre、Arbre binaire équilibré、Arbre Rouge et noir Sont des structures de données classiques .InB+Dans l'arbre,Tous les noeuds d'enregistrement sont placés sur les noeuds de feuilles dans l'ordre de la taille de la clé,Comme le montre la figure ci - dessous:.

B+L'index de l'arbre peut être divisé en index principal et index auxiliaire..Où l'index principal est l'index groupé,L'index secondaire est un index non groupé.L'index groupé est la clé primaireB+ La valeur clé de l'index arborescentB+Index des arbres,Le noeud foliaire de l'index groupé stocke un enregistrement complet des données;Les index non groupés sont des colonnes qui ne sont pas des clés primairesB+La valeur clé de l'index arborescentB+Index des arbres,Le noeud foliaire d'un index non groupé stocke la valeur de la clé primaire.Ainsi, lorsque vous Interrogez avec un index non groupé,La valeur de la clé primaire sera trouvée en premier,Ensuite, trouvez le champ de données correspondant à la clé primaire à partir de l'index groupé.Les noeuds foliaires de la figure ci - dessus stockent les enregistrements de données,Structure de l'index groupé,La structure de l'indice non groupé est la suivante::

Mysql La différence entre un indice groupé et un indice non groupé_Tiens bon.,

  • Index de hachage

L'index de hachage est basé sur la table de hachage,Pour chaque ligne de données,Le moteur de stockage hachera la colonne index par algorithme de hachage pour obtenir le Code de hachage,Et l'algorithme de hachage doit s'assurer que la valeur du Code de hachage calculée par différentes valeurs de colonne est différente autant que possible.,Utiliser la valeur du Code de hachage comme valeur de la table de hachagekeyValeur,Utiliser un pointeur vers une ligne de données commevalueValeur.La complexité temporelle de la recherche d'une donnée esto(1),Généralement utilisé pour une recherche précise.

HashIndex etB+La différence entre les arbres?()

hash La couche inférieure de l'index est hashTableau, Lors de la recherche ,Appelez une foishash La fonction obtient la clé correspondante , Ensuite, effectuer une requête de retour de table pour obtenir les données réelles .

B+ L'implémentation sous - jacente de l'arbre est Arbre de recherche multi - équilibré. Chaque requête commence à partir du noeud racine , Trouver un noeud de feuille pour obtenir la valeur de la clé , Ensuite, selon la requête, déterminer si les données de requête doivent être retournées à la table .

Parce que leurs structures de données sont différentes, leurs scénarios d'utilisation sont différents., Les index de hachage sont généralement utilisés pour Équivalence exacte Trouver,B+L'index est principalement utilisé pour des recherches autres que des recherches équivalentes précises.Dans la plupart des cas,Sera sélectionné pour utiliserB+Index des arbres.

  • Le tri n'est pas pris en charge pour les index de hachage,Parce que la table de hachage est désordonnée.
  • Index de hachageLa recherche de plage n'est pas prise en charge.
  • Index de hachageRequête floue non prise en charge Et le préfixe le plus à gauche correspond à l'index Multi - colonnes .
  • Parce que la table de hachage existe Hash conflict,Donc la performance de l'index de hachage est instable,EtB+La performance de l'index arborescent est relativement stable,Chaque requête va du noeud racine au noeud feuille

BArbres etB+La différence entre les arbres?()

BArbres etB+Les principales différences entre les arbres sont les suivantes::

  • B Les noeuds internes et les noeuds foliaires de l'arbre sont stockés Clés et valeurs,

  • B+ArbreInterneNoeud Seule la clé n'a pas de valeur ,Les noeuds foliaires stockent toutes les clés et valeurs.

  • B+Arbre Les noeuds foliaires sont reliés Ensemble,Faciliter la recherche séquentielle.

    La structure des deux est la suivante:.

BArbres etB+La différence entre les arbres

Pourquoi la base de données est - elle utilisée?B+Arbre au lieu deBArbre?()

  • B Arbre pour Recherche aléatoire ,EtB+ Arbre pour Recherche aléatoire Et Recherche séquentielle
  • B+ L'espace de l'arbre Utilisation plus élevée,Parce queBChaque noeud de l'arbre stocke les clés et les valeurs,EtB+Les noeuds internes de l'arbre ne stockent que les clés,Voilà.B+Un noeud de l'arbre peut stocker plus d'index,Pour abaisser la hauteur de l'arbre,DiminutionI/ONombre de fois,Accélérer la récupération des données.
  • B+Les noeuds foliaires de l'arbre sont connectés,Alors...Recherche de portée,Recherche séquentielle plus pratique
  • B+ Performance de l'arbre Plus stable Allez,Parce queB+Dans l'arbre,Chaque requête va du noeud racine au noeud feuille,EtBDans l'arbre,La valeur à interroger peut ne pas être dans le noeud de feuille,Trouvé dans le noeud interne.

Dans quelles circonstances est - ce approprié?BOù sont les arbres?,Parce queBLes noeuds internes de l'arbre peuvent également stocker des valeurs,Vous pouvez donc placer quelques valeurs fréquemment consultées plus près du noeud racine,Cela améliore l'efficacité de la requête.En résumé,B+La performance de l'arbre est mieux adaptée à l'indexation de la base de données.

Quels sont les types d'index??

  • Index des clés primaires:Les colonnes de données ne peuvent pas être dupliquées,Non.NULL,Une table ne peut avoir qu'un seul index de clés primaires
  • Indice combiné:ParColonnes multiples Index des valeurs .
  • Index unique:Les colonnes de données ne peuvent pas être dupliquées,Peut êtreNULL,La valeur de la colonne index doit être unique,S'il s'agit d'un index combiné,La combinaison des valeurs de colonne doit être unique.
  • Index texte complet: Texte ContenuEffectuer une recherche.
  • Index général:Type d'index de base,Peut êtreNULL

Quels sont les principes de création d'index? ?()

L'index est bon. , Mais ce n'est pas une utilisation illimitée , Il y a quelques principes à suivre.

1) Principe de correspondance du préfixe le plus à gauche, Principes très importants de l'indexation combinée ,mysqlCorrespond à droite jusqu'à ce que la requête scope soit rencontrée(>、<、between、like)Arrête de correspondre.,Par exemple,a = 1 and b = 2 and c > 3 and d = 4 Si(a,b,c,d)Index séquentiel,dN'est pas indexé,Si(a,b,d,c)Vous pouvez utiliser tous les index,a,b,dL'ordre de.( Les détails sont donnés ci - dessous. )

2) Les champs qui sont des critères de requête plus fréquents créent des index

3)Plus Nouveau champ fréquent Ne convient pas à la création d'index

4)Si Impossible de distinguer efficacement les données Les colonnes ne conviennent pas aux colonnes d'index (Comme le sexe, Hommes et femmes inconnus , Trois au plus. , La distinction est trop faible. )

5) Étendre l'index autant que possible ,Ne pas créer un nouvel index.Par exemple, le tableau contient déjàaIndex de,Maintenant.(a,b)Index de,Il suffit de modifier l'index original.

6) Pour définir une colonne de données avec une clé étrangère, assurez - vous d'établir un index .

7) Pour les colonnes rarement impliquées dans les requêtes , Ne pas indexer les colonnes avec plus de valeurs en double .

8)Pour la définition detext、imageEtbit Ne pas indexer les colonnes du type de données pour .

Quel est le principe de correspondance le plus à gauche?()

Principe de correspondance à gauche:Correspondance continue à partir de l'extrême gauche comme point de départ,RencontreRequête scope(<、>、between、like)Arrêter la correspondance.

Par exemple, indexation(a,b,c),Vous pouvez deviner si l'index est utilisé dans les cas suivants:.

  • Première catégorie

    select * from table_name where a = 1 and b = 2 and c = 3
    select * from table_name where b = 2 and a = 1 and c = 3
    

    Index utilisé pour toutes les valeurs des deux requêtes précédentes,whereLe changement de champ suivant n'affecte pas les résultats de la requête,Parce queMySQLL'optimiseur dans Optimize automatiquement l'ordre de requête.

  • Deuxième type

    select * from table_name where a = 1
    select * from table_name where a = 1 and b = 2
    select * from table_name where a = 1 and b = 2 and c = 3
    

    La réponse est que l'index est utilisé dans les trois énoncés de requête,Parce que les trois déclarations correspondent à partir de l'extrême gauche.

  • La troisième

    select * from table_name where b = 1
    select * from table_name where b = 1 and c = 2
    

    La réponse est qu'aucun de ces énoncés de requête n'utilise d'index,Parce que ça ne correspond pas à partir de l'extrême gauche.

  • Type 4

    select * from table_name where a = 1 and c = 2
    

    Cette requête n'a queaLa colonne utilise l'index,cLa colonne n'utilise pas d'index,Parce que le milieu a sautébColonnes,Ne correspond pas continuellement à partir de l'extrême gauche.

  • Cinquième catégorie

    select * from table_name where a = 1 and b < 3 and c < 1
    

    Seulement dans cette requêteaColonnes etbColonne utilisée dans l'index,EtcColonne non indexée,Parce que le principe de requête correspond le plus à gauche,La requête scope s'arrête lorsqu'elle est rencontrée.

  • Sixième

    select * from table_name where a like 'ab%';
    select * from table_name where a like '%ab'
    select * from table_name where a like '%ab%'
    

    Pour les cas listés comme chaînes,Seuls les préfixes correspondants peuvent utiliser l'index,L'appariement des suffixes et des suffixes ne peut être effectué que pour un balayage complet de la table.

Qu'est - ce qu'un index groupé,Qu'est - ce qu'un index non groupé?()

La principale différence entre les indices groupés et les indices non groupés est la suivante:Les données et les index sont - ils stockés séparément?.

  • Index groupé:Oui.Données et index Stocker ensemble ,Les noeuds foliaires de la structure de l'index conservent les lignes de données.
  • Index non groupé: Entrée et indexation des données Stockage séparé,Le noeud enfant de la feuille d'index stocke l'adresse qui pointe vers la ligne de données.

InInnoDBDans le moteur de stockage,L'index par défaut estB+Index des arbres,Index créé avec la clé primaire index primaire,Est également un index groupé,L'index créé au - dessus de l'index primaire est un index secondaire,Est également un index non groupé.Pourquoi l'index secondaire est - il créé sur l'index primaire?,Parce que le noeud foliaire dans l'index secondaire stocke la clé primaire.

InMyISAMDans le moteur de stockage,L'index par défaut est égalementB+Index des arbres,Mais les index primaire et secondaire ne sont pas groupés,C'est - à - dire que les noeuds foliaires de la structure d'index stockent une adresse qui pointe vers la ligne de données.Et utiliser un index secondaire pour récupérer les index qui n'ont pas besoin d'accéder à la clé primaire.

Vous pouvez voir la différence entre deux graphiques très classiques(Photo du réseau):
Insérer la description de l'image ici

Quels sont les trois paradigmes de la base de données? ?()

Premier paradigme(1NF):Les champs ne sont pas séparables;
Deuxième paradigme(2NF):Avec clé primaire,Le champ clé non primaire dépend de la clé primaire;
Troisième paradigme(3NF):Les champs clés non primaires ne peuvent pas être interdépendants.

1NF:Atomicité. Champ non séparable,Sinon, ce n'est pas une base de données relationnelle;;
2NF:Unicité . Un tableau ne montre qu'une seule chose ;
3NF: Chaque colonne est directement liée à la clé primaire ,Aucune dépendance de livraison n'existe.

Dans quelles circonstances l'index échouera - t - il??()

Plusieurs cas de non - conformité à la règle de correspondance la plus à gauche sont décrits ci - dessus, ce qui entraîne l'invalidation de l'index.,En plus de ça,,Les conditions suivantes peuvent également invalider l'index:.

  • Parmi les conditionsor,Par exempleselect * from table_name where a = 1 or b = 3
  • Le calcul de l'index peut entraîner l'invalidation de l'index,Par exempleselect * from table_name where a + 1 = 2
  • Conversion furtive des types de données sur les types d'index,Peut invalider l'index,Par exemple, une chaîne doit être citée,Hypothèses select * from table_name where a = '1'Sera utilisé dans l'index,Si c'est écritselect * from table_name where a = 1L'index échouera.
  • L'utilisation de fonctions dans un index peut invalider l'index,Par exempleselect * from table_name where abs(a) = 1
  • En servicelikeLors de la requête%Le début peut invalider l'index
  • Utilisé sur l'index!、=、<>Le jugement peut invalider l'index,Par exempleselect * from table_name where a != 1
  • Utilisé sur le champ Index is null/is not nullLe jugement peut invalider l'index,Par exempleselect * from table_name where a is null

Qu'est - ce qu'une transaction de base de données?

Transactions de base de données( transaction)Est une séquence d'opérations de base de données qui accèdent et peuvent manipuler divers éléments de données,Toutes ces opérations doivent être effectuées,Ou pas du tout.,Est une unit é de travail indivisible.La transaction comprend toutes les opérations de base de données effectuées entre le début et la fin de la transaction..

Quatre caractéristiques de la transaction(ACID)Qu'est - ce que c'est??()

  • Atomicité: L'atomicité est l'opération qui contient la transaction Ou tout a été exécuté avec succès,Ou tout a échoué.【Basic】
  • Cohérence:La cohérence signifie que l'état d'une transaction est cohérent avant et après l'exécution..
  • Isolement:Modifications apportées par une entreprise avant la soumission finale,Non visible pour les autres transactions.
  • Persistance:Une fois les données soumises, Les modifications qu'il apporte PermanentEnregistrer dans la base de données.【Disque】

Cohérence simultanée des bases de données()

Lorsque plusieurs transactions sont effectuées simultanément,Les problèmes suivants peuvent survenir::

  • Sale lecture.:ServicesADonnées mises à jour,Mais pas encore soumis,À ce moment - là,ServicesBLire à la transactionAAprès mise à jour【 Mais pas soumis 】Données,Et puis les affairesAÇa roule.,ServicesBLes données lues deviennent sales..
  • Non répétable:ServicesALecture multiple des données,ServicesBAffaires en coursAL'opération de mise à jour a été effectuée et soumise lors de plusieurs lectures,Cause transactionALes données lues plus d'une fois ne sont pas cohérentes.
  • Lecture fictive:ServicesAAprès lecture des données,ServicesBAffairesAPlusieurs données ont été insérées dans les données lues,ServicesAPlusieurs données supplémentaires ont été trouvées lors de la lecture des données à nouveau,Incohérence avec les données précédemment lues.
  • Modification manquante:ServicesAEt servicesBModifier les mêmes données,ServicesAModifier d'abord,ServicesBModifications ultérieures,ServicesBLa modification de override transactionAModification de.

La non - Répétabilité et la lecture fantôme ressemblent beaucoup,Les principales différences sont les suivantes::

En lecture non répétable,Les données sont incohérentes, principalement parce qu'elles ont été mises à jour..

En lecture fictive,L'incohérence des données est principalement due à l'augmentation ou à la diminution des données..

Quels sont les niveaux d'isolement de la base de données??()

  • Lecture non engagée:Une transaction avant d'être engagée, Ses modifications s'appliquent également aux autres transactions. Visible.
  • Soumettre pour lecture:UnAprès la transaction, Il ne peut être modifié que par d'autres transactions Tu vois?.
  • Répétable: Lu plusieurs fois dans la même transaction Les données sont cohérentes .
  • Sérialisation:Verrouillage nécessaire,Force l'exécution en série de la transaction.

Le niveau d'isolement de la base de données peut résoudre la lecture sale de la base de données séparément、Non répétable、Problèmes de lecture fictive, etc..

Niveau d'isolement Sale lecture. Non répétable Lecture fictive
Lecture non engagée Allow Allow Allow
Soumettre pour lecture Non autorisé Allow Allow
Répétable Non autorisé Non autorisé Allow
Sérialisation Non autorisé Non autorisé Non autorisé

MySQLLe niveau d'isolement par défaut pour est répétable.

Le mécanisme d'isolement des transactions repose principalement sur le mécanisme de verrouillage etMVCC(Contrôle de la concurrence Multi - Versions)Réalisé,

Soumettre des lectures et des lectures répétables Peut passerMVCCRéalisation,La sérialisation peut être réalisée par un mécanisme de verrouillage.

Qu'est - ce queMVCC?()

MVCC(multiple version concurrent control)C'est unContrôle de la concurrenceMéthode,Principalement utilisé pour améliorer les performances simultanées de la base de données.

Pour comprendreMVCCVous devriez d'abord comprendre la lecture actuelle et la lecture instantanée.

  • Lecture actuelle: Lire à partir de la base de données Dernière version[ Lecture verrouillée ],Et assurez - vous que d'autres transactions ne modifient pas l'enregistrement courant lors de la lecture, Donc, les enregistrements lus Verrouillage.
  • Snapshot Read: Lire sans verrouillage L'opération Fetch est une lecture instantanée ,UtiliserMVCCPour lire les données du Snapshot, Éviter les performances de verrouillage Perte.

Je vois.MVCC Le rôle de Non verrouillé En bas.【Snapshot Read】, Résoudre la base de données Problèmes de conflit de lecture et d'écriture ,Et résoudreSale lecture.、Lecture fictive、Non répétableAttendez.,Mais ne résout pas le problème des modifications manquantes.

MVCCPrincipe de réalisation:

  • Numéro de version

    Numéro de version du système:Est une auto - augmentationID,Chaque transaction ouverte,Le numéro de version du système est incrémenté.

    Numéro de version de la transaction: Le numéro de version de la transaction est Numéro de version du système au début de la transaction ,L'ordre chronologique des transactions peut être déterminé par la taille du numéro de version de la transaction..

  • Colonnes cachées dans les enregistrements de ligne

    DB_ROW_ID:Espace nécessaire6byte, Auto - augmentation implicite D'accordID,Utilisé pour générer un index groupé,Si la table de données ne spécifie pas d'index groupé,InnoDBIl va utiliser ça pour se cacher.IDCréer un index groupé.

    DB_TRX_ID:Espace nécessaire6byte, Récemment modifié ServicesID,Enregistrer la transaction qui a créé cet enregistrement ou l'a modifié pour la dernière foisID.

    DB_ROLL_PTR:Espace nécessaire7byte,Pointeur de retour en arrière,Pointer vers la dernière version de cet enregistrement.

    Ils sont à peu près comme ça.,Valeur du champ spécifique omise.·

  • undoLog

    MVCCLes instantanés utilisés sont stockés dansUndoDans le journal,Le journal connecte tous les instantanés d'une ligne de données par un pointeur de retour en arrière.Ils sont à peu près comme ça..

img

 Contrôle de la concurrence Multi - versions dans la base de données (MVCC) - Le vent se lève.

L'analyse ci - dessus montre que,Modification du même enregistrement par transaction,Les enregistrements individuels sont enregistrés dansUndoConnectez - vous à une table linéaire dans le journal,Dans l'en - tête, c'est le dernier vieux record..

Au niveau d'isolement de la lecture répétée,InnoDBFlux de travail pour:

  • SELECT

    Deux conditions doivent être remplies à la suite d'une requête:

    1. Pour la transaction actuelle Requête De la ligne de données Le numéro de version de création doit être inférieur au numéro de version de la transaction courante ,L'objectif est de s'assurer qu'un instantané de la ligne de données lue par la transaction courante existe avant le début de la transaction courante.,Soit la transaction courante elle - même a été insérée ou modifiée.
    2. Pour la transaction actuelle Le numéro de version supprimé du Snapshot de ligne de données Lu doit être supérieur au numéro de version de la transaction courante ,Si elle est inférieure ou égale à,Indique que le Snapshot de la ligne de données a été supprimé,Impossible de lire.
    3. Le résumé est Plus grand que le temps de création , Moins de temps de suppression
  • INSERT

    Utiliser le numéro de version actuel du système comme ligne de données Numéro de version de création du Snapshot .

  • DELETE

    Utiliser le numéro de version actuel du système comme ligne de données Numéro de version supprimé du Snapshot .

  • UPDATE

    Enregistrer le numéro de version actuel du système créer un numéro de version de ligne pour le Snapshot de ligne de données avant la mise à jour,Et enregistrer le numéro de version du système actuel comme numéro de version supprimé du Snapshot de ligne de données mis à jour,En fait, c'est, Supprimer puis insérer est une mise à jour .

Résumé,MVCC Le but est d'éviter le verrouillage Résoudre au maximum les conflits simultanés entre la lecture et l'écriture ,Il peut être réalisé Soumettre la lecture et la répétabilité Deux niveaux d'isolement .

Niveau d'isolement Sale lecture. Non répétable Lecture fictive
Lecture non engagée Allow Allow Allow
Soumettre pour lecture Non autorisé Allow Allow
Répétable Non autorisé Non autorisé Allow
Sérialisation Non autorisé Non autorisé Non autorisé

MySQL Quels sont les déclencheurs dans ?

InMySQL Il y a six déclencheurs dans la base de données :

  • ``Before Insert`
  • After Insert
  • Before Update
  • After Update
  • Before Delete
  • After Delete

SQLQuels sont les principaux types d'énoncés?

  • Langage de définition des donnéesDDL(Data Ddefinition Language) CREATE,DROP,ALTER

    Principalement pour les opérations ci - dessus C'est - à - dire qu'il fonctionne sur des structures logiques, etc. , Cela comprend la structure du tableau ,Affichage et index.

  • Langage de requête de donnéesDQL(Data Query Language) SELECT

    C'est mieux compris. C'est - à - dire l'opération de requête ,ParselectMots clés. Diverses requêtes simples ,Requête de connexion, etc. Tous appartiennent àDQL.

  • Langage de manipulation des donnéesDML(Data Manipulation Language) INSERT,UPDATE,DELET

    Principalement pour les opérations ci - dessus Qui fonctionne sur les données , Correspond à l'opération de requête décrite ci - dessus DQLAvecDML Ensemble, la plupart des programmeurs débutants utilisent couramment l'ajout, la suppression et la modification des opérations de recherche. . La requête est un type particulier Divisé en DQLMoyenne.

Super clé、Clé candidate、Clé primaire、 Quelles sont les clés étrangères? ?

  • Super clé: Dans une relation Ensemble de propriétés identifiant uniquement les tuples Une superclé appelée modèle relationnel . Un attribut peut être utilisé comme hyperclé , Plusieurs attributs peuvent également être combinés en tant que superclé . La superclé contient la Clé candidate et la clé primaire .

  • Clé candidate: Est la plus petite superclé , C'est - à - dire qu'il n'y a pas de superclés redondantes .

  • Clé primaire: Une combinaison de colonnes de données ou d'attributs dans une table de base de données qui identifient de façon unique et complète l'objet de données stocké. .

    Une colonne de données ne peut avoir qu'une seule clé primaire , Et la valeur de la clé primaire ne peut pas être manquante , Ne peut pas être vide (Null).

  • Clé étrangère: Nom de la clé primaire d'une autre table qui existe dans une table Clé étrangère pour ce tableau .

Quelles sont les associations entre les tableaux? ?

  • Connexion interne(INNER JOIN
  • Connexion externe(LEFT JOIN/RIGHT JOIN
  • Requête conjointe(UNIONAvecUNION ALL
  • Connexion complète(FULL JOIN
  • Connexion croisée(CROSS JOIN

full join Il le faut. on Correspondance des conditions , Une correspondance pour toutes les sorties

cross join C'est le produit cartésien., Sortie sans correspondance

Pour plus de détails, voir : https://hiszm.blog.csdn.net/article/details/119736109

UNIONAvecUNION ALLLa différence entre?

  • Si vous utilisezUNION ALL, Les lignes d'enregistrement dupliquées ne sont pas fusionnées
  • Efficacité UNION Supérieur à UNION ALL

type Quels sont les types d'accès ?()

type Représentation MySQL Décider comment trouver des lignes dans un tableau ,De Du pire au meilleur Il y a plusieurs valeurs:

  1. ALL:
    • Balayage complet de la table, Cela signifie généralement MySQL La table entière doit être numérisée ,Du début à la fin, Pour trouver la ligne dont vous avez besoin
    • Il y a des exceptions, Comme dans la requête LIMIT,OuExtra Afficher dans la colonne “Using distinct/not exists”
  2. index:
    • C'est comme un scan de table. ,C'est juste...MySQL Lors de la numérisation des tables Par ordre d'index Au lieu de ça., Le principal avantage est d'éviter le tri
    • L'inconvénient est de supporter les frais généraux de lecture de la table entière dans l'ordre d'indexation . Cela signifie généralement que si vous accédez aux lignes dans un ordre aléatoire , Les frais généraux seront très élevés
    • Si dansExtra Voir dans la colonne “Using index”,DescriptionMySQL Utilisation de l'index override , Il ne scanne que les données indexées , Au lieu de chaque ligne dans l'ordre de l'index
  3. range:
    • Un balayage de portée est un balayage d'index limité , C'est mieux que la numérisation complète de l'index. , Parce qu'il n'a pas besoin de traverser tous les index
    • QuandMySQL Lorsque vous utilisez un index pour trouver une série de valeurs ,Par exempleIN()EtORListe, Est également affiché comme suit: Balayage de la portée.Et pourtant, Les deux sont en fait des types d'accès très différents , Différences importantes de performance
  4. ref:
    • Un accès à l'index ( Parfois aussi appelé recherche d'index ), Il renvoie toutes les lignes correspondant à une seule valeur
    • Seulement si Utiliser un index non unique Ou le préfixe non unique de l'index d'unicité se produit
    • ref_or_null - Oui.ref Une variante au - dessus ,Ça veut direMySQL Vous devez effectuer une deuxième recherche dans les résultats de la recherche initiale pour trouver NULLEntrée
  5. eq_ref
    • Un accès à l'index ,MySQL Savoir qu'au plus un enregistrement admissible est retourné
    • InMySQL Utiliser la clé primaire Ou se produit lors d'une recherche d'index unique
  6. const, system
    • QuandMySQL Lorsqu'une partie de la requête peut être optimisée et convertie en constante , Ces types d'accès sont utilisés
    • Par exemple, Si vous mettez la clé primaire d'une ligne dans WHERE La façon dont la clause sélectionne la clé primaire de cette ligne ,MySQL Vous pouvez convertir cette requête en une constante . Vous pouvez ensuite supprimer efficacement la table de l'exécution join .
  7. NULL
    • Ce mode d'accès signifie MySQL Peut décomposer l'instruction de requête en phase d'optimisation , Vous n'avez même pas besoin d'accéder aux tables ou aux index pendant la phase d'exécution
    • Par exemple, La sélection d'une valeur minimale à partir d'une colonne d'index peut être effectuée en recherchant l'index séparément. , Vous n'avez pas besoin d'accéder au tableau au moment de l'exécution

Un articleSQL Processus d'exécution des déclarations de requête ?()

Description du processus:

  1. Client Demande d'initiation;
  2. Demande d'arrivée Connecteur(Authentification de l'utilisateur,Autorisation accordée);
  3. Cache de requête(La présence d'un cache renvoie directement,S'il n'existe pas, effectuer les opérations suivantes);
  4. Demande d'arrivée Analyseur(C'est exact.SQLAnalyse lexicale et grammaticale);
  5. Demande d'arrivée Optimizer(Principalement pour l'exécutionSQLOptimisation, Choisir le meilleur plan d'exécution );
  6. Demande d'arrivée Actionneur(L'exécution dépend d'abord si l'utilisateur a la permission d'exécuter,Pour utiliser les interfaces fournies par ce moteur);
  7. Au niveau du moteur Obtenir des données et retourner( Si le cache de requête est activé , Les résultats de la requête sont mis en cache ).

SQL Quelles sont les contraintes? ?

  • NOT NULL: Le contenu du champ de contrôle ne doit pas être vide (NULL).
  • UNIQUE: Le contenu du champ de contrôle ne peut pas être dupliqué , Plus d'une table est autorisée Unique Contraintes.
  • PRIMARY KEY: Le contenu du champ de contrôle ne peut pas être dupliqué , Mais il ne permet qu'une seule occurrence dans une table .
  • FOREIGN KEY: Action pour empêcher la rupture des connexions entre les tables , Empêche également l'insertion illégale de données dans des colonnes de clés étrangères ,Parce qu'il doit être l'une des valeurs du tableau qu'il pointe.
  • CHECK: Plage de valeurs utilisée pour contrôler les champs .

drop、deleteAvectruncateLa différence entre?

Les trois représentent la suppression , Mais il y a quelques différences :

Delete Truncate Drop
Type DeDML DeDDL DeDDL
Retour en arrière Rollback Pas de retour en arrière Pas de retour en arrière
Supprimer le contenu La structure de la montre est toujours là., Supprimer tout ou un tableau Données partiellesD'accord La structure de la montre est toujours là., Supprimer le Toutes les données Supprimer les tables de la base de données , Toutes les lignes de données , Les index et les permissions sont également supprimés
Supprimer la vitesse Suppression lente ,BesoinSupprimer ligne par ligne Suppression rapide Suppression la plus rapide

Résumé

Quand une table n'est plus nécessaire ,Avecdrop;

Lorsque vous voulez supprimer certaines lignes de données ,Avecdelete;

Utilisé lors de la conservation des tableaux et de la suppression de toutes les données truncate.

Qu'est - ce qu'une serrure de base de données?

Lorsque la base de données a des transactions simultanées,Le mécanisme qui garantit l'ordre d'accès aux données est appelé mécanisme de verrouillage..

Relation entre le niveau de verrouillage et d'isolement de la base de données?()

Niveau d'isolement Mode de réalisation
Lecture non engagée Toujours lire les dernières données,Pas besoin de verrouillage
Soumettre pour lecture Verrouillage partagé lors de la lecture des données,Libérer la serrure partagée après avoir lu les données
Répétable Verrouillage partagé lors de la lecture des données,Libérer les serrures partagées à la fin de la transaction
Sérialisation Verrouiller toute la gamme des touches,Tenir la serrure jusqu'à ce que la transaction soit terminée

Quels sont les types de serrures de base de données?()

Verrouillé GranulométrieVous pouvezMySQLIl y a trois types de serrures:

MySQLCatégorie de serrure Dépenses afférentes aux ressources Vitesse de verrouillage Y a - t - il une impasse? Taille de la serrure Degré de concurrence
Serrure de table Petit Allez Ça ne va pas Grand Faible
Verrouillage des rangées Grand Doucement Oui. Petit Élevé
Verrouillage de la page En général En général Ça ne va pas En général En général

MyISAMVerrouillage par défaut au niveau de la table,InnoDBVerrouillage par défaut au niveau de la ligne.

De la serrure Catégorie La différence supérieure peut être divisée en serrure partagée et serrure exclusive

  • Serrure partagée: Serrure partagée Lisez la serrure.,En brefSVerrouillage,Une transaction ajoute un objet de donnéesSVerrouillage,Cet objet de données peut être lu,Mais vous ne pouvez pas mettre à jour.Et d'autres transactions ne peuvent ajouter que cet objet de données pendant le verrouillageSVerrouillage,Non.XVerrouillage. Les serrures partagées peuvent être combinées avec plusieurs serrures .
  • Verrouillage exclusif: La serrure exclusive est aussi appelée Écris la serrure.,En brefXVerrouillage,Une transaction ajoute un objet de donnéesXVerrouillage,Cet objet peut être lu et mis à jour,Pendant le verrouillage,L'objet de données ne peut pas être ajouté par une autre transactionXSerrure ouSVerrouillage. Une seule serrure peut être ajoutée. ,Il est enfermé avec les autres., Les serrures partagées sont mutuellement exclusives .

Qu'est - ce qu'une serrure optimiste et une serrure pessimiste dans une base de données,Comment réaliser?()

La serrure optimiste:Le système suppose que les mises à jour des données ne sont pas conflictuelles la plupart du temps, Donc la base de données Mise à jour seulement Détection des conflits de données lors de la soumission ,En cas de conflit,La mise à jour des données échoue.

Mise en œuvre de la serrure optimiste:Généralement par Numéro de version et CASAlgorithmesRéalisation.

Serrure pessimiste:Supposons qu'un conflit de concurrence se produise,Bloquer toutes les actions qui pourraient violer l'intégrité des données.En termes simples, chaque fois que vous allez chercher des données, vous pensez que quelqu'un d'autre va les modifier., Donc chaque fois que vous prenez des données Verrouillage.

Mise en œuvre de la serrure pessimiste:Par l'intermédiaire de la base de donnéesMécanisme de verrouillageRéalisation,Ajouter une instruction de requêtefor updata.

select * from table where id=1 for update

CAS,C'est - à - dire: Compare And Swap(Comparaison et échange), Est un algorithme sans verrouillage ,Mise en œuvre basée sur les primitives matérielles, Possibilité de synchroniser les variables entre plusieurs Threads sans verrouillage .jdkDansjava.util.concurrent.atomicLes classes atomiques dans le paquet passent parCASPour obtenir une serrure optimiste.

CASProcessus algorithmique()

L'algorithme implique trois opérandes:

  • Emplacement de la mémoire à lire et à écrireV
  • Valeur attendue à comparer A
  • Nouvelle valeur à écrire U

CASAnalyse de l'algorithme:

CAS Lors de la mise en œuvre spécifique ,Si et seulement si prévuA Correspond à l'adresse mémoire V Lorsque la valeur stockée dans , Juste une nouvelle valeur. U Remplacer l'ancienne valeur , Et écrit à l'adresse mémoire VMoyenne. Sinon, aucune mise à jour .

CAS Le principe de fonctionnement de l'algorithme est le suivant: :

CAS Il y aura trois problèmes: :

1.ABAQuestions, Un thread déplace la valeur de mémoire de ALire comme suit:B, Un autre thread vient de B Retour à A.

2.Les longs cycles coûtent cher:CAS L'algorithme a besoin d'un spin constant pour lire les dernières valeurs de mémoire , Ne pas lire pendant de longues périodes peut causer des erreurs inutiles CPUDépenses.

3.Une opération atomique qui ne peut garantir qu'une seule variable partagée(jdkDeAtomicReference Pour assurer l'atomicité entre les objets d'application ,Vous pouvez placer plusieurs variables dans un seul objetCASFonctionnement,Résoudre le problème).

ABASchéma du problème:

ABARésolution de problèmes: Ajouter un numéro de version avant la variable , Ajouter le numéro de version à chaque mise à jour de la variable 1,Par exemple,juc Dans l'enveloppe atomique de AtomicStampedReferenceCatégorie.

Qu'est - ce qu'une impasse?Comment éviter?()

L'impasse est Deux processus ou plus Pendant l'exécution,Un phénomène de blocage causé par la concurrence pour les ressources ou la communication entre elles.

InMySQLMoyenne,MyISAMEst d'obtenir toutes les serrures nécessaires en même temps,Soit ils sont tous satisfaits,Ou attendre,Il n'y aura pas d'impasse..

InInnoDBDans le moteur de stockage,Sauf un seulSQLEn dehors des transactions constitutives,Les serrures sont acquises progressivement,Il y a donc une impasse..

Comment éviterMySQLVerrouillage de la vie et de la mort ou conflit de serrures:

  • Si différents programmes accèdent simultanément à plusieurs tables, Essayez d'utiliser le même Tableau d'accès séquentiel .
  • Lorsque le programme traite les données par lots,Si les données ont été triées,Essayez de vous assurer que chaque fil traite les enregistrements dans un ordre fixe.
  • Dans la transaction,Mettre à jour les enregistrements si nécessaire, Demande directe Assez de serrures exclusives ,Au lieu de demander une serrure partagée,Appliquer une serrure exclusive lors de la mise à jour,Parce que lorsque l'utilisateur actuel demande une serrure exclusive,D'autres transactions peuvent avoir obtenu une serrure partagée pour le même enregistrement,Cause un conflit de serrures ou une impasse.
  • Essaie. Utiliser un niveau d'isolement inférieur
  • Essaie. Utiliser l'index pour accéder aux données ,Rendre le verrouillage plus précis,Réduire les risques de conflit de serrures
  • Choisir raisonnablement la taille de la transaction,Moins de collisions de serrures pour les petites transactions
  • Essayez d'accéder aux données dans des conditions égales,Peut être évitéNext-KeyEffet du verrouillage sur l'insertion simultanée.
  • Ne pas appliquer plus que nécessaire,Essayez de ne pas afficher le verrouillage lors de l'interrogation
  • Pour certaines transactions,Les serrures peuvent être affichées pour augmenter la vitesse de traitement ou réduire la probabilité d'impasse.

drop、deleteEttruncateLa différence entre?

drop delete truncate
Vitesse Allez Supprimer ligne par ligne,Doucement Plus vite.
Type DDL DML DDL
Retour en arrière Pas de retour en arrière Rollback Pas de retour en arrière
Supprimer le contenu Supprimer le tableau entier,Lignes de données、Les index sont supprimés La structure de la montre est toujours là.,Supprimer une partie ou la totalité des données du tableau La structure de la montre est toujours là.,Supprimer toutes les données du tableau

En général,Supprimer le tableau entier,Utiliserdrop,Supprimer une partie de l'utilisation des données du tableaudelete,Conserver la structure de la table supprimer toutes les données de la table utilisertruncate.

UNIONEtUNION ALLLa différence entre?

unionEtunion allLes deux ensembles de résultats sont combinés.

  • unionLes résultats seront réorganisés et triés,union allRenvoie directement les résultats fusionnés,Pas de duplication ni de tri.
  • union allRapport de performanceunionBonne performance.

Comment optimiser la requête de données de grande table?

  • Optimisation de l'index
  • SQLOptimisation des déclarations
  • Séparation horizontale
  • Séparation verticale
  • Établissement de tableaux intermédiaires
  • Utilisation de la technologie de mise en cache
  • Les tables de longueur fixe sont accessibles plus rapidement
  • Plus la colonne est petite, plus l'accès est rapide

Comment optimiser les requêtes lentes?()

Les requêtes lentes sont généralement utilisées pour enregistrer les temps d'exécution supérieurs à un certain seuilSQLJournal des déclarations.

Paramètres connexes:

  • slow_query_log:Activer la requête slow log,1Indique l'ouverture,0Indique la fermeture.
  • slow_query_log_file:MySQLChemin de stockage du Journal de requête lent de la base de données.
  • long_query_time:Seuil de requête lent,QuandSQLLe temps de requête de l'instruction est supérieur au seuil,Sera enregistré dans le journal.
  • log_queries_not_using_indexes:Les requêtes qui n'utilisent pas d'index sont enregistrées dans le Journal des requêtes lentes.
  • log_output:Mode de stockage des journaux.“FILE”Indique que le journal est enregistré dans un fichier.“TABLE”Représente l'enregistrement dans la base de données.

Méthodes

  1. Activer le journal de requête lent

Éléments de configuration:slow_query_log

Peut être utiliséshow variables like ‘slov_query_log’Voir si on,

La valeur de l'état des résultats est OFF,Peut être utiliséset GLOBAL slow_query_log = onPour ouvrir,

Il seradatadir La prochaine génération xxx-slow.logDocuments.

  1. Définir le temps critique

Éléments de configuration:long_query_time

Voir:show VARIABLES like 'long_query_time',Unités de seconde

Paramètres:set long_query_time=0.5

La pratique doit être réglée de longue à courte durée , Bientôt le plus lent SQLOptimisé

  1. Voir le journal,

Une foisSQL Au - delà du temps critique que nous avons fixé, il sera enregistré xxx-slow.logMoyenne

L'optimisation des requêtes lentes doit d'abord comprendre la raison de la lenteur ? Oui, les critères de requête n'ont pas atteint l'index ?- Oui.load Colonnes de données indésirables ? Il y a trop de données. ?

Donc l'optimisation est dans ces trois directions ,

  • Plan d'exécution de l'instruction d'analyse,VoirSQLL'index de l'instruction a - t - il été touché?
  • Optimiser la structure de la base de données,Diviser une table avec beaucoup de champs en plusieurs tables,Ou envisager de créer un tableau intermédiaire.
  • OptimisationLIMITPagination.

LIMIT La clause peut être utilisée pour forcer SELECT L'instruction renvoie le nombre spécifié d'enregistrements.

LIMIT Accepter un ou deux paramètres numériques .L'argument doit être une constante entière.

Si deux paramètres sont donnés,

Le premier paramètre indique l'offset de la première ligne d'enregistrement retournée,

Le deuxième paramètre indique le nombre maximum de lignes d'enregistrement retournées.

L'offset de la ligne d'enregistrement initiale est 0(Au lieu de 1)

mysql> SELECT * FROM table LIMIT 5,10;
// Récupérer les lignes d'enregistrement 6-15
mysql> SELECT * FROM table LIMIT 5;
//Avant récupération 5 Lignes d'enregistrement 
//En d'autres termes,,LIMIT n Équivalent à LIMIT 0,n.

La clé primaire est généralement auto - incrémentéeIDToujoursUUID?()

Utilisation de l'auto - augmentationIDAvantages:

  • La longueur du champ est relativement longueuuidOui.Beaucoup plus petit..
  • Numérotation automatique de la base de données,Appuyez.Stockage séquentiel,Faciliter la recherche
  • Ne vous inquiétez pas de la duplication de la clé primaire Questions

Utilisation de l'auto - augmentationIDLes inconvénients de:

  • Parce que c'est l'auto - augmentation,Dans certains scénarios d'affaires, Facile à repérer. Volume d'affaires.
  • Données d'occurrence Lors de la migration, Ou fusion de tableaux C'est très gênant.
  • InForte concurrenceDans le scénario,L'auto - verrouillage compétitif réduit le débit de la base de données

UUID:(Universally Unique Identifier)Code d'identification unique universel,UUIDEst basé sur l'heure actuelle、Les compteurs et les identificateurs matériels sont calculés et générés..

UtiliserUUIDLes avantages de:

  • Identification unique,Les problèmes de duplication ne seront pas pris en considération,Division des données、 Peut également être atteint lors de la fusion Unicité globale .
  • Ça pourrait être dans Génération de couches d'application ,Améliorer le débit de la base de données.
  • Ne vous inquiétez pas des fuites de volume La question de.

UtiliserUUIDLes inconvénients de:

  • Parce queUUIDEst généré au hasard, Ça arrive. **AléatoireIO,Affecte la vitesse d'insertion,**Et peut entraîner une utilisation plus faible du disque dur.
  • UUIDOccupation** Plus grand ,Plus d'index sont créés,**Plus l'impact est grand.
  • UUIDEntre La taille de la comparaison est plus auto - croissante IDPlus lentement.,Affecter la vitesse de requête.

Enfin, concluez.,GénéralitésMySQLAuto - augmentation recommandéeID.Parce queMySQLDeInnoDBDans le moteur de stockage,L'index des clés primaires est une sorte d'index groupé,Index des clés primairesB+Les noeuds foliaires de l'arbre stockent les valeurs et les données de la clé primaire dans l'ordre,Si l'index de la clé primaire est auto - incrémentéID,Il suffit de l'organiser en arrière dans l'ordre,Si ouiUUID,IDEst généré au hasard,Provoque de grands mouvements de données lors de l'insertion de données,Générer une grande quantité de fragments de mémoire,Provoque une dégradation des performances d'insertion.

Comment optimiser l'accès aux données dans le processus de requête? ()

Considérations relatives à la réduction de l'accès aux données:

  • Utilisation correcte de l'index,Couverture de l'index autant que possible
  • OptimisationSQLPlan de mise en œuvre

Envisager de renvoyer moins de données:

  • Traitement de la pagination des données
  • Seuls les champs requis sont retournés

Réduire le serveur à partir deCPUConsidérations relatives aux dépenses:

  • Utilisation rationnelle du tri
  • Réduire les opérations de comparaison
  • Opérations complexes traitées par le client

Examen de l'augmentation des ressources:

  • Accès parallèle Multi - processus côté client
  • Traitement parallèle de la base de données

Comment optimiserWHEREClause

  • Pas ici.whereUtilisé dans la clause!=Et<>Faire un jugement inégal,Cela peut entraîner l'abandon de l'index pour un balayage complet de la table.
  • Pas ici.whereUtilisé dans la clausenullOu jugement nul,Essayez de définir le champ commenot null.
  • Utiliser autant que possibleunion allRemplaceror
  • InwhereEtorder byIndex des colonnes impliquées
  • Réduire au minimum l'utilisationinOunot in,Un balayage complet de la table sera effectué
  • InwhereL'utilisation de paramètres dans une clause provoque un balayage complet de la table
  • Évitez dewhereL'utilisation de champs et d'expressions ou de fonctions dans une clause peut entraîner un balayage complet de la table au lieu de l'importation par le moteur de stockage

Ordre d'exécution()

from -> on -> join -> where -> group by -> having -> select -> distinct -> order by
  • FROM:C'est exact.SQLLorsque l'instruction exécute une requête,Tout d'abord, connectez les tables des deux côtés du mot - clé sous forme de produit cartésien,Et génère une table virtuelleV1.La table virtuelle est la vue,Les données proviennent des résultats d'exécution de plusieurs tableaux.
  • ON:C'est exact.FROMRésultats de la connexionONFiltration,Et créer une table virtuelleV2
  • JOIN:Oui.ONAjouter la table de gauche filtrée,Et créer une nouvelle table virtuelleV3
  • WHERE:Pour les tables virtuellesV3En coursWHEREFiltrage,Créer une table virtuelleV4
  • GROUP BY:C'est exact.V4Enregistrement en groupe,Créer une table virtuelleV5
  • HAVING:C'est exact.V5Filtrer,Créer une table virtuelleV6
  • SELECT:Oui.V6Les résultats deSELECTFiltrer,Créer une table virtuelleV7
  • DISTINCT:C'est exact.V7Les résultats du tableau sont retirés.,Créer une table virtuelleV8,S'il est utiliséGROUP BYLa clause n'a pas besoin d'être utiliséeDISTINCT,Parce que les valeurs uniques d'une colonne sont groupées,Et chaque groupe ne renvoie qu'une seule ligne d'enregistrements,Donc tous les enregistrementshC'est différent..
  • ORDER BY:C'est exact.V8Trier les résultats dans le tableau.

MySQLPrincipe et processus de reproduction?Comment réaliser la réplication maître - esclave?()

MySQLCopier:Pour assurer la cohérence des données du serveur maître et du serveur esclave,Après avoir inséré des données dans le serveur principal,Les données modifiées du serveur primaire sont automatiquement synchronisées à partir du serveur.

MySQLComment fonctionne la copie maître - esclave

  • Dans la bibliothèque principale Données Plus élevé enregistré Journal binaire
  • Copier les journaux de la bibliothèque principale de la bibliothèque à la sienne Journal de relais
  • De la bibliothèque Lire le journal de relais Les événements de, Replacez - le dans les données de la bibliothèque

La réplication maître - esclave a trois fils principaux:binlogThread,I/OThread,SQLThread.

  • 【Seigneur.】binlogThread:Responsable de l'écriture des modifications de données sur le serveur primaire dans le journal binaire(Binary log)Moyenne.
  • 【De】I/OThread:Responsable de la lecture des journaux binaires depuis le serveur principal(Binary log),Et écrire le journal de relais du serveur esclave(Relay log)Moyenne.
  • 【De】SQLThread:Responsable de la lecture du Journal de relais,Résoudre les modifications de données qui ont été effectuées dans le serveur principal et les Replay à partir du serveur

MySQLDétails de la copie maître - esclave

Rôle de la réplication maître - esclave:

  • Haute disponibilité et FAILOVER
  • Équilibrage de la charge
  • Sauvegarde des données
  • Test de mise à niveau

Comprendre la séparation lecture - écriture?()

La séparation lecture - écriture dépend principalement de la réplication maître - esclave,Copie maître - esclave pour le Service de séparation lecture - écriture.

Avantages de la séparation lecture - écriture:

  • Le serveur principal est responsable de l'écriture,Lire à partir du serveur,Facilite la concurrence pour les serrures
  • Disponible à partir du serveurMyISAM,Améliorer les performances de requête et économiser les frais généraux du système
  • Augmentation de la redondance,Améliorer la disponibilité

La séparation lecture - écriture dépend de la réplication maître - esclave , La réplication maître - esclave est utilisée pour la séparation lecture - écriture .

En raison des exigences de réplication maître - esclave slave Je ne peux pas écrire, je ne peux que lire.

Si ouislaveEffectuer une opération d'écriture,Alorsshow slave status Sera présenté Slave_SQL_Running=NO, À ce stade, vous devez synchroniser manuellement comme indiqué précédemment slave.

Programme I

Utilisermysql-proxyAgents

Avantages: Réalisation directe de la séparation lecture - écriture et de l'équilibrage de la charge , Pas besoin de modifier le Code ,masterEtslave Avec le même numéro de compte ,mysql Officiellement déconseillé pour la production réelle

Inconvénients:Réduction des performances, Transaction non prise en charge

Programme II

UtiliserAbstractRoutingDataSource+aop+annotationIndao Niveau déterminant la source des données .
Si elle est adoptéemybatis, Vous pouvez séparer la lecture et l'écriture en ORMCouche,Par exemple,mybatisPeut passermybatis pluginInterceptionsqlDéclarations,Tous lesinsert/update/delete Toutes les visites masterBibliothèque,Tous lesselect Toutes les visites salveBibliothèque,C'est pourdao Les couches sont transparentes .plugin Lors de la mise en œuvre, vous pouvez sélectionner la Bibliothèque maître - esclave en annotant ou en analysant si l'instruction est une méthode de lecture - écriture. . Mais il y a un problème. , C'est - à - dire que la transaction n'est pas prise en charge , Nous devons donc réécrire DataSourceTransactionManager, Oui.read-only Les affaires sont jetées dans la bibliothèque , Le reste, lu et écrit, est jeté dans la Bibliothèque d'écriture. .

Programme III

UtiliserAbstractRoutingDataSource+aop+annotationInservice Niveau déterminant la source des données , Peut soutenir les transactions .

Inconvénients: La méthode interne de la classe passe par this.xx() Lorsque les modes s'appellent les uns les autres ,aop Pas d'interception. , Traitement spécial requis .

Fonction de fenêtre de la base de données ()

Objectif

On sait tous les deux quesqlIl y a une classe de fonctions appelées fonctions agrégées,Par exemplesum()avg()max()Attendez un peu!,
Ces fonctions peuvent regrouper plusieurs lignes de données en une seule ligne selon des règles, En général, le nombre de lignes groupées est inférieur au nombre de lignes groupées
Nombre de lignes avant l'ensemble .

Mais parfois, nous voulons montrer à la fois les données avant l'agrégation, Afficher également les données agrégées ,

Puis nous avons introduit la fonction Windows .

La fonction Windowing peut renvoyer plusieurs valeurs pour chaque groupe , Parce que le Groupe de rowset pour le calcul d'agrégation effectué par la fonction Windowing est une fenêtre .

Application

  1. Pour le tri des partitions
  2. DynamiqueGROUP BY
  3. TOP N
  4. Calcul cumulatif
  5. Requête hiérarchique

Format

  • Partition(partition by

  • Trier(order by

  • Champ d'application(rows betweenOurange between

over(partition by col1 order by col2 rows between col3)

Fonction de fenêtre=Fonction d'analyse+Over();

row_number() over(partition byorder by)
rank() over(partition byorder by)
dense_rank() over(partition byorder by)
count() over(partition byorder by)
max() over(partition byorder by)
min() over(partition byorder by)
sum() over(partition byorder by)
avg() over(partition byorder by)
first_value() over(partition byorder by)
last_value() over(partition byorder by)
lag() over(partition byorder by)
lead() over(partition byorder by)

Pour plus de détails sur la fonction de fenêtre, voir :https://hiszm.blog.csdn.net/article/details/119824742

Références

https://hiszm.cn
https://hiszm.blog.csdn.net/article/details/119540143
https://mp.weixin.qq.com/s/REzOiTTNKstR1JHlu3thzQ
https://blog.csdn.net/jankin6/category_11191625.html
https://mp.weixin.qq.com/s_biz=MzU3MzgwNTU2Mg==&mid=2247487449&idx=1&sn=2cc97bf6669416267c25a7a46192b706&scene=21#wechat_redirect
版权声明
本文为[Sun zhongming]所创,转载请带上原文链接,感谢
https://qdmana.com/2021/10/20211014044119636x.html

  1. Html + CSS + JS implémentation ️ Responsive Lucky Turnover ️ [with full source Sharing]
  2. Ren Jialun, who married young, was in a mess. Now she feels that it is a blessing in disguise
  3. 达梦数据库使用disql生成html格式的巡检报告
  4. React render phase parsing II - beginwork process
  5. Tableau linéaire de la structure des données (dessin à la main)
  6. In 2022, what are the highlights and popular elements in skirts to make skirts more elegant and gentle?
  7. JQuery installation
  8. Exemple de développement Android, dernière compilation de questions d'entrevue Android
  9. Differences and relations between JDK, JRE and JVM, nginx architecture diagram
  10. 【Azure 云服务】Azure Cloud Service 为 Web Role(IIS Host)增加自定义字段 (把HTTP Request Header中的User-Agent字段增加到IIS输出日志中)
  11. 【Azure 云服务】Azure Cloud Service 为 Web Role(IIS Host)增加自定义字段 (把HTTP Request Header中的User-Agent字段增加到IIS输出日志中)
  12. Questions d'entrevue pour les ingénieurs en développement Android, Android Foundation 72 questions
  13. It's kind of Cadillac CT6 to have a Mercedes Benz S-class captain and a 10At entry-level configuration, falling to less than 300000
  14. H6 meets the strong enemy again! The car body has a Cayenne visual sense, breaking 8.8 seconds, and the top configuration is less than 130000
  15. How nginx supports HTTPS and Linux kernel video tutorial
  16. Le martyr se réjouit de sa vieillesse Audi R8 V10 performance Rwd
  17. import 方式隨意互轉,感受 babel 插件的威力
  18. Le mode d'importation peut se déplacer librement pour sentir la puissance du plug - in Babel
  19. Pas de héros en termes de ventes!Du point de vue de la force du produit, la nouvelle version ax7 Mach est plus forte que H6
  20. The vue3 + TS project introduces vant as needed
  21. 深入浅出虚拟 DOM 和 Diff 算法,及 Vue2 与 Vue3 中的区别
  22. 深入淺出虛擬 DOM 和 Diff 算法,及 Vue2 與 Vue3 中的區別
  23. Explorer les algorithmes DOM et diff virtuels et les différences entre vue2 et vue3
  24. 两万字Vue基础知识总结,小白零基础入门,跟着路线走,不迷路(建议收藏)
  25. Résumé des connaissances de base de 20 000 mots vue, Introduction à la petite base blanche zéro, suivre la route et ne pas se perdre (Collection recommandée)
  26. 兩萬字Vue基礎知識總結,小白零基礎入門,跟著路線走,不迷路(建議收藏)
  27. "Talk show conference 4" Zhou qimo a remporté le championnat. Tout le monde l'admire. Il est mature et stable et a une vue d'ensemble
  28. Test logiciel entrevue non technique questions classiques - mise à jour continue!
  29. Digital forward disassembly reverse disassembly
  30. Analyse du cache distribué redis et essence de l'entrevue en usine v6.2.6
  31. [Hadoop 3. X series] use of HDFS rest HTTP API (II) httpfs
  32. Zhang Daxian sang in the morning to bless the motherland, xYG team: singing is much better than us
  33. My three years' experience -- avoiding endless internal friction
  34. Introduction à l'algorithme "dénombrement binaire" modéré 01 - - question d'entrevue leetcode 10.09. Recherche de matrice de tri
  35. Introduction à l'algorithme simple 06 - - leetcode 34. Trouver la première et la dernière position d'un élément dans un tableau de tri
  36. CSS animation
  37. Explain the new tags in HTML5 and the pseudo classes and pseudo elements in CSS3
  38. They are all talking about "serverless first", but do you really understand serverless?
  39. [apprentissage de l'algorithme] 1486. Fonctionnement exclusif du tableau (Java / C / C + + / python / go / Rust)
  40. Front and back end data interaction (VI) -- advantages, disadvantages and comparison of Ajax, fetch and Axios
  41. Front and back end data interaction (V) -- what is Axios?
  42. Front and back end data interaction (III) -- Ajax encapsulation and call
  43. 前端 100 万行代码是怎样的体验?
  44. 湖中剑 前端周刊 #10(ESLint8、Web 端侧 AI、react-if)
  45. 湖中劍 前端周刊 #10(ESLint8、Web 端側 AI、react-if)
  46. 前端 100 萬行代碼是怎樣的體驗?
  47. Huzhong Sword Front End Weekly # 10 (eslint8, Web end ai, React if)
  48. Quelle est l'expérience du premier million de lignes de code?
  49. Pancakeswap front-end source compilation and deployment Linux
  50. Pancakeswap front-end source compilation - Windows
  51. Walls and columns are powered, and 50W transmission power is available in any corner. The University of Tokyo has built a wireless charging house
  52. Pas besoin d'embrayage pour allumer une voiture?Vieux conducteur: la voiture est très blessée par des erreurs. Ces mauvaises habitudes doivent être changées!
  53. Cadre de développement Android MVP, résumé de l'entrevue
  54. [Azure Cloud Service] Azure Cloud Service ajoute des champs personnalisés pour le rôle Web (hôte IIS) (ajoute le champ user agent dans l'en - tête de demande http au Journal de sortie IIS)
  55. Principes de la plate - forme de développement Android, questions d'entrevue de développement Android
  56. [Azure Cloud Service] Azure Cloud Service ajoute des champs personnalisés pour le rôle Web (hôte IIS) (ajoute le champ user agent dans l'en - tête de demande http au Journal de sortie IIS)
  57. Weilai es8 was listed in Norway and SAIC's driverless concept car appeared at the World Expo
  58. One of the most high-frequency algorithm problems in the front end! Reverse linked list
  59. Échange de doigts d'épée 11. Nombre minimum de tableaux rotatifs
  60. Questions et réponses à l'entrevue Big Data (réimprimé)