Cet article partage principalement avec vous les questions d'entretien MYSQL (1), dans l'espoir de vous aider.
[Recommandations sur des sujets connexes : Questions d'entretien MySQL (2020)]
Comment concevoir un système à haute concurrence<.>
① Optimisation de la base de données, y compris un niveau d'isolation raisonnable des transactions, SQL optimisation des instructions, optimisation des index
② Utiliser le cache pour minimiser la base de données IO
③ Distribué base de données, cache distribué
④ Équilibrage de charge du serveur
2 . Stratégie d'optimisation du verrouillage
① Séparation en lecture et en écriture② Verrouillage segmenté ③ Réduire le temps de maintien du verrouillage 🎜>④ Plusieurs threads doivent essayer d'obtenir des ressources dans le même ordre
etc. Ce ne sont pas des principes absolus et doivent être basés sur la situation. Par exemple, le verrouillage ne peut pas être La granularité est trop détaillée. , sinon le thread risque d'être verrouillé et libéré trop de fois, ce qui ne sera pas aussi efficace que l'ajout d'un gros verrou à la fois. J'ai longuement parlé avec l'intervieweur de cette partie
3 Les principes sous-jacents de mise en œuvre et d'optimisation des index<.> Arbre
B+, l'arbre B+ optimisé
est principalement dans Un pointeur vers le nœud feuille suivant de est ajouté à tous les nœuds feuilles. Par conséquent, InnoDB recommande d'utiliser la clé primaire auto-incrémentée par défaut comme. l'index principal de la plupart des tables.
4. Lorsque l'index est défini mais ne peut pas être utilisé
① Instruction LIKE commençant par "%", correspondance floue② Aucun index n'est utilisé avant et après l'instruction OR ③ Il existe une conversion implicite du type de données (par exemple, varchar peut être automatiquement converti en type int sans guillemets simples)
5 . Optimisation des instructions SQL
Comment gérer la commande en modifier, essayer de fusionner plusieurs fois en une seule insérer et supprimer également être fusionnéAttendez6 Comment optimiser en pratiqueMySQL.
J'ai répondu aux quatre questions suivantes dans l'ordre. En termes d'effet, la première a le plus grand impact, et les suivantes sont de plus en plus petites.
① SQLOptimisation des instructions et des index
② Optimisation de la structure des tables de la base de données
③ Optimisation de la configuration du système
④ Optimisation du matériel
8. Les principales caractéristiques de l'injection SQLIl existe de nombreuses variantes, des attaques simples et de grands dommages9 Les principaux dangers de l'injection SQLSans Autoriser l'exploitation des données de la base de données
Modifier de manière malveillante des pages Web
Ajouter des comptes système ou des comptes d'utilisateurs de base de données en privé
Suspendre des chevaux de Troie sur des pages Web
· Sélectionnez l'attribut de champ le plus applicable, réduisez autant que possible la largeur du champ défini et essayez de définir le champ à NOTNULL, Par exemple, 'province' et 'sexe' sont les mieux adaptés à ENUM
· Utiliser la connexion (JOIN) au lieu de la sous-requête
· Utilisez l'union (UNION) pour remplacer la table temporaire créée manuellement
· Traitement des transactions
· Verrouiller la table, optimiser le traitement des transactions
· Appliquer les clés étrangères, optimiser la table de verrouillage
· Créer un index
· Optimiser l'instruction de requête
Les index sont des fichiers spéciaux (les index des tables de données InnoDB sont un composant de l'espace table) et ils contiennent des pointeurs de référence vers tous les enregistrements de la table de données.
La seule tâche d'un index normal (un index défini par le mot-clé KEY ou INDEX) est d'accélérer l'accès aux données.
Les index normaux permettent aux colonnes de données indexées de contenir des valeurs en double. Si vous pouvez déterminer qu'une certaine colonne de données ne contiendra que des valeurs différentes les unes des autres, vous devez utiliser le mot-clé UNIQUE pour la définir comme un index unique lors de la création d'un index pour cette colonne de données. En d’autres termes, un index unique peut garantir l’unicité des enregistrements de données.
La clé primaire est un index unique spécial. Un seul index de clé primaire peut être défini dans une table. La clé primaire est utilisée pour identifier de manière unique un enregistrement. Utilisez le mot-clé PRIMARY KEY pour créer.
L'index peut couvrir plusieurs colonnes de données, telles que l'index INDEX(columnA, columnB), qui est un index conjoint.
Les indices peuvent grandement améliorer la vitesse d'interrogation des données, mais ralentiront la vitesse d'insertion, de suppression et de mise à jour des tables, car lors de l'exécution de ces opérations d'écriture, Pour exploiter le fichier d'index.
La transaction (transaction) est un groupe d'unités comme une unité Opérations ordonnées de base de données. Une transaction est considérée comme réussie si toutes les opérations du groupe réussissent, même si une seule opération échoue, la transaction échoue. Si toutes les opérations sont terminées, la transaction est validée et ses modifications sont appliquées à tous les autres processus de base de données. Si une opération échoue, la transaction est annulée et les effets de toutes les opérations de la transaction sont annulés. Les quatre principales caractéristiques de l’ACID sont l’atomicité, l’isolement, la cohérence et la durabilité.
XSS est une attaque de script intersite. Premièrement, il utilise une vulnérabilité de script intersite pour exécuter un script construit par l'attaquant dans un mode privilégié, puis utilise. un contrôle Activex dangereux pour exécuter un comportement malveillant.
Utilisez la fonction htmlspecialchars() pour filtrer le contenu soumis et matérialiser les symboles spéciaux dans la chaîne.
Cause de l'injection SQL : Au cours du processus de développement du programme, vous n'avez pas prêté attention à l'écriture standard des instructions SQL et au filtrage des caractères spéciaux, ce qui a permis au client de pouvoir pour soumettre certaines données via les variables globales POST et GET L'instruction SQL est exécutée normalement.
Activer magic_quotes_gpc et magic_quotes_runtime settings
Utiliser des addlashes pour la conversion des instructions SQL lors de l'exécution de instruction SQL
Écriture d'instructions SQL Essayez de ne pas omettre guillemets doubles et simples.
Filtrez certains mots-clés dans l'instruction sql : mettre à jour, insérer, supprimer, sélectionner, *.
Améliorez vos compétences en matière de dénomination des tables et des champs de la base de données. Nommez certains champs importants en fonction des caractéristiques du programme, afin qu'ils soient difficiles à deviner.
Définissez register_globals sur off dans le fichier de configuration Php et désactivez l'enregistrement des variables globales
Contrôlez les messages d'erreur et faites ne parcourez pas les informations d'erreur de sortie sur le serveur et écrivez les informations d'erreur dans le fichier journal .
Accédez rapidement à des informations spécifiques dans les tableaux de données pour augmenter la vitesse de récupération
Créez un A unique L'index unique garantit l'unicité de chaque ligne de données dans la table de base de données.
Accélérer les tables et les jointures entre les tables
Utiliser des clauses de regroupement et de tri Lors de la récupération des données, le temps de regroupement et de tri dans les requêtes peut être considérablement réduit
Impact négatif :
Créer un index Il faut du temps pour maintenir et maintenir les index, qui augmente à mesure que la quantité de données augmente ; les index doivent occuper de l'espace physique, non seulement la table doit occuper de l'espace de données, mais chaque index doit également occuper de l'espace physique lors de l'ajout, de la suppression, ou en modifiant la table, l'index doit également être maintenu dynamiquement, ce qui réduit la vitesse de maintenance des données.
Créez un index sur les champs les plus fréquemment utilisés pour affiner la portée de la requête.
Créer des index sur les champs fréquemment utilisés qui doivent être triés
Il n'est pas approprié de créer un index pour les colonnes rarement impliquées dans des requêtes ou des colonnes avec de nombreuses valeurs en double.
Pour certains types de données spéciaux, il n'est pas adapté de créer des index, tels que des champs de texte (texte), etc.
La caractéristique la plus importante qui le distingue des autres. bases de données est son moteur de stockage de tables plug-in. N'oubliez pas : le moteur de stockage est basé sur des tables et non sur des bases de données.
La différence entre InnoDB et MyISAM :
Moteur de stockage InnoDB : Principal Pour les applications OLTP (Online Transaction Processing), il s'agit du premier moteur de stockage à prendre entièrement en charge les transactions ACID (BDB a été le premier moteur de stockage à prendre en charge les transactions et a arrêté son développement).
Caractéristiques :
· Verrouillage des rangées Concevoir, prendre en charge les clés étrangères , prendre en charge les transactions, prendre en charge la concurrence, la granularité du verrouillage prend en charge les verrous au niveau des lignes mvcc
Moteur de stockage MyISAM : est le moteur de stockage officiellement fourni par MySQL, principalement pour les applications OLAP (Online Analytical Processing, analyse et traitement en ligne).
Caractéristiques :
Ne prend pas en charge les transactions, La granularité du verrouillage prend en charge les verrous au niveau de la table pour l'insertion simultanée, et prend en charge les index de table et de texte intégral. Fonctionnement rapide , ne peut pas lire et écrire trop fréquemment Parlons d'abord de la jointure croisée : La jointure croisée est également appelée produit cartésien. Cela signifie combiner directement tous les enregistrements d'une table avec tous les enregistrements d'une autre table sans en utiliser aucun. Conditions. Faites correspondre un par un. Jointure interne est une jointure croisée avec uniquement des conditions, filtrant les enregistrements qui remplissent les conditions en fonction de une certaine condition , les enregistrements qui ne remplissent pas les conditions n'apparaîtront pas dans le jeu de résultats, c'est-à-dire que la jointure interne ne connecte que les lignes correspondantes. Jointure externe gauche, également appelée jointure gauche, la table de gauche est la table principale, tous les enregistrements de la table de gauche apparaîtront dans le jeu de résultats, pour ceux dans le tableau de droite Il n'y a pas d'enregistrement correspondant dans , il doit encore être affiché et les valeurs des champs correspondants à droite sont remplies de NULL. Jointure externe droite, également appelée jointure droite, la table de droite est la table principale et tous les enregistrements de la table de droite apparaîtront dans le jeu de résultats. Les jointures gauche et droite sont interchangeables et MySQL ne prend actuellement pas en charge les jointures externes complètes. MyISAM, InnoDB, BDB (BerkeleyDB), Merge, Memory (Heap), Sample, Federated, Une transaction est une séquence d'opérations de base de données définie par l'utilisateur. , ces opérations sont effectuées ou ne sont pas effectuées du tout et constituent une unité de travail indivisible. L'annulation de transaction fait référence à l'annulation des opérations de mise à jour de la base de données qui ont été effectuées par la transaction. Lorsque l'on souhaite modifier deux tables différentes de la base de données en même temps, s'il ne s'agit pas d'une transaction, lorsque la première table est modifiée, la seconde La table peut être modifiée. Une exception s'est produite pendant le processus et la modification n'a pas pu être effectuée. A ce moment, seule la deuxième table est encore dans son état non modifié, alors que la première table a été modifiée. Et lorsque vous les définissez comme transaction, lorsque la première table est modifiée et la deuxième table est modifiée anormalement et ne peut pas être modifiée, la première table et la deuxième table reviendront à l'état non modifié. C'est ce qu'on appelle la restauration de la transaction <.> 2. Quelles parties le langage SQL comprend-il ? Quels sont les mots-clés d’action pour chaque section ? Réponse : Le langage SQL comprend quatre parties : la définition des données (DDL), la manipulation des données (DML), le contrôle des données (DCL) et la requête de données (DQL). Définition des données : Créer une table, modifier une table, supprimer une table, créer un index, etc. Manipulation des données : Sélectionner, insérer, mettre à jour, supprimer, Contrôle des données : accorder, révoquer Requête de données : sélectionner 3. Que comprennent les contraintes d'intégrité ? Réponse : L'intégrité des données (Data Integrity) fait référence à l'exactitude et à la fiabilité des données. est divisé en quatre catégories suivantes : 1) Intégrité de l'entité : stipule que chaque ligne du tableau est dans le tableau est la seule entité. 2) Intégrité du domaine : cela signifie que les colonnes du tableau doivent répondre à certaines contraintes de type de données, qui incluent la plage de valeurs, la précision et d'autres réglementations. 3) Intégrité référentielle : cela signifie que les données de la clé primaire et de la clé étrangère des deux tables doivent être cohérentes, garantissant la cohérence des données entre les tables et empêchant la corruption des données. . Les données manquantes ou dénuées de sens prolifèrent dans la base de données. 4) Intégrité définie par l'utilisateur : différents systèmes de bases de données relationnelles nécessitent souvent des contraintes particulières en fonction de leurs environnements d'application. L'intégrité définie par l'utilisateur est une contrainte pour une base de données relationnelle spécifique, qui reflète les exigences sémantiques auxquelles une application spécifique doit répondre. Contraintes liées aux tables : dont contraintes de colonnes (NOT NULL (contrainte non nulle)) et table Contraintes (PRIMARY KEY, clé étrangère, check, UNIQUE). 4. Qu'est-ce qu'une transaction ? et ses caractéristiques ? Réponse : Transaction : Il s'agit d'une série d'opérations de base de données et de l'unité logique de base des applications de base de données. Caractéristiques de la transaction : (1) Atomicité : c'est-à-dire, Pas de division possible, soit toutes les transactions sont exécutées, soit aucune n'est exécutée. (2) Cohérence ou cordabilité. L'exécution d'une transaction convertit la base de données d'un état correct à un autre état correct (3) Isolement. Avant que la transaction ne soit correctement validée, toute modification apportée aux données par la transaction ne peut être fournie à aucune autre transaction, (4) Persistance. Une fois qu'une transaction est soumise correctement, ses résultats seront enregistrés de manière permanente dans la base de données. Même s'il y a d'autres échecs après la soumission de la transaction, les résultats du traitement de la transaction seront enregistrés. Ou comprenez-le de cette façon : Les transactions sont liées entre elles comme une unité logique de travail Regroupement d'instructions SQL, si une opération d'instruction échoue, l'opération entière échouera et les opérations futures seront ramenées à l'état avant l'opération, ou il y aura un nœud dessus. Pour garantir que quelque chose est exécuté ou non, des transactions peuvent être utilisées. Pour considérer un relevé groupé comme une transaction, il doit réussir les tests ACID , à savoir l'atomicité, la cohérence, l'isolement et la durabilité. 5. Qu'est-ce qu'une serrure ? Réponse : La base de données est une ressource partagée utilisée par plusieurs utilisateurs. Lorsque plusieurs utilisateurs accèdent simultanément aux données, plusieurs transactions accèdent simultanément aux mêmes données dans la base de données. Si les opérations simultanées ne sont pas contrôlées, des données incorrectes peuvent être lues et stockées, détruisant la cohérence de la base de données. Le verrouillage est une technologie très importante pour contrôler la concurrence des bases de données. Lorsqu'une transaction opère sur un objet de données, elle envoie d'abord une demande au système pour le verrouiller. Après le verrouillage, la transaction a un certain contrôle sur l'objet de données. Avant que la transaction ne libère le verrou, les autres transactions ne peuvent pas mettre à jour l'objet de données. Types de verrous de base : les verrous incluent les verrous au niveau des lignes et les verrous au niveau des tables 6. Qu'est-ce que la vue ? Qu'est-ce qu'un curseur ? Réponse : Une vue est une table virtuelle qui a les mêmes fonctions qu'une table physique. Vous pouvez ajouter, modifier, interroger et utiliser des vues. Une vue est généralement un sous-ensemble de lignes ou de colonnes d'une ou de plusieurs tables. Les modifications apportées à la vue n'affectent pas les tables sous-jacentes. Cela nous permet d'obtenir plus facilement des données que les requêtes multi-tables. Curseur : il traite efficacement l'ensemble des résultats de la requête comme une unité. Le curseur peut être positionné sur une ligne spécifique de la cellule pour récupérer une ou plusieurs lignes de la ligne actuelle dans le jeu de résultats. Vous pouvez apporter des modifications à la ligne actuelle du jeu de résultats. Les curseurs ne sont généralement pas utilisés, mais lorsque les données doivent être traitées une par une, les curseurs sont très importants. 7. Qu'est-ce qu'une procédure stockée ? Comment appeler ? Réponse : La procédure stockée est une instruction SQL précompilée. L'avantage est qu'elle permet une conception modulaire, ce qui signifie qu'elle ne doit être créée qu'une seule fois. utilisé dans le programme plus tard. Vous pouvez l'appeler plusieurs fois. Si une certaine opération nécessite plusieurs exécutions de SQL, l'utilisation de procédures stockées est plus rapide que l'exécution de simples instructions SQL. Les procédures stockées peuvent être appelées à l'aide d'un objet de commande. 8. Quel est le rôle de l'index ? Et quels sont ses avantages et ses inconvénients ? Réponse : Un index est une table de requête spéciale que le moteur de recherche de base de données peut utiliser pour accélérer la récupération des données. C'est très similaire à la table des matières d'un livre dans la vraie vie. Vous pouvez trouver les données souhaitées sans interroger l'intégralité du livre. Les index peuvent être uniques et la création d'un index vous permet de spécifier une seule ou plusieurs colonnes. L’inconvénient est que cela ralentit la saisie des données et augmente la taille de la base de données. 9. Comment comprendre les trois paradigmes de manière populaire ? Réponse : Première forme normale : 1NF est une contrainte atomique sur les attributs, qui nécessite que les attributs soient atomiques et ne peuvent pas être décomposés Deuxième forme normale : 2NF est une contrainte unique sur les enregistrements, exigeant que les enregistrements aient des identifiants uniques, c'est-à-dire l'unicité des entités Troisième forme normale : 3NF est une contrainte sur la redondance des champs, c'est-à-dire qu'aucun champ ne peut être dérivé d'autres champs. Il nécessite que les champs ne soient pas redondants. . Avantages et inconvénients de la conception paradigmatique: Avantages: Peut réduire autant que possible la redondance des données, rendant les mises à jour plus rapides et plus petites. L'association entre les tables réduit l'efficacité d'écriture et augmente l'efficacité de lecture, ce qui rend plus difficile l'optimisation de l'index Dénormalisation : Avantages : Elle peut réduire les associations de tables et permettre une meilleure optimisation de l'index Inconvénients : Redondance des données et anomalies des données, la modification des données nécessite plus de coûts 10 Qu'est-ce qu'une base. tableau? Qu'est-ce qu'une vue ? SQL, une relation. is Correspond à un tableau. Une vue est une table dérivée d'une ou plusieurs tables de base. La vue elle-même n'est pas stockée indépendamment dans la base de données, mais est une table virtuelle 11. Décrivez les avantages des vues ? (1) Les vues peuvent simplifier les opérations de l'utilisateur (2) Les vues permettent aux utilisateurs de visualiser les mêmes données sous plusieurs angles (3) Les vues sont des bases de données. un certain degré d'indépendance logique ; (4) Les vues peuvent assurer la protection des données confidentielles. 12. Que signifie NULL ? La valeur NULL représente INCONNU : elle ne représente pas " " (chaîne vide). Toute comparaison avec une valeur NULL produira une valeur NULL. Vous ne pouvez comparer aucune valeur à une valeur NULL et vous attendre logiquement à obtenir une réponse. Utilisez IS NULL pour un jugement NULL 13. Quelle est la différence entre la clé primaire, la clé étrangère et l'index. ?
Définition : Clé primaire - identifie de manière unique un enregistrement, ne peut pas être dupliquée et ne peut pas être vide Clé étrangère - la clé étrangère d'une table appartient à une autre table Les clés primaires et les clés étrangères peuvent avoir des doublons et peuvent être des valeurs nulles Index - ce champ n'a pas de valeurs en double, mais peut avoir une valeur nulle Fonction : Clé primaire - à utiliser pour garantir l'intégrité des données Clés étrangères - utilisées pour établir des connexions avec d'autres tables Index - pour améliorer les requêtes Vitesse de tri Numéro : Clé primaire - il ne peut y avoir qu'une seule clé primaire Clé étrangère - -Une table peut avoir plusieurs clés étrangères Index -Une table peut avoir plusieurs index uniques 14. Que pouvez-vous utiliser pour vous assurer que les champs du tableau n'acceptent que les valeurs d'une plage spécifique ? Réponse : Vérifiez la restriction. , il est défini dans une table de base de données pour limiter la valeur saisie dans cette colonne. Les déclencheurs peuvent également être utilisés pour limiter les valeurs que les champs des tables de base de données peuvent accepter, mais cette méthode nécessite que des déclencheurs soient définis dans la table, ce qui peut affecter les performances dans certains cas. 15. Quelles sont les méthodes pour optimiser les instructions SQL ? (Choisissez-en quelques-uns) (1) Dans la clause Where : La connexion entre les tables Where doit être écrite avant les autres conditions Where, celles-ci peuvent filtrer les plus grandes Les conditions pour les enregistrements de quantités doivent être écrites à la fin de la clause Where qui se trouve à la fin. (2) Remplacez IN par EXISTS et NOT IN par NOT EXISTS. (3) Évitez d'utiliser des calculs sur des colonnes indexées (4) Évitez d'utiliser IS NULL et IS NOT NULL (5) sur la colonne d'index pour optimiser la requête. Vous devriez essayer d'éviter les analyses de table complètes. Vous devez d'abord déterminer où. et Créez un index sur les colonnes impliquées dans l'ordre par. (6) Vous devriez essayer d'éviter un jugement de valeur nul sur les champs de la clause Where, sinon le moteur abandonnera l'utilisation de l'index et effectuera une table complète scan (7) Vous devez essayer d'éviter les opérations d'expression sur les champs de la clause Where, ce qui amènera le moteur à abandonner l'utilisation de l'index et à effectuer un analyse complète de la table 16. Quelle est la différence entre « sous-requête corrélée » et « sous-requête non corrélée » dans une instruction SQL ? Réponse : Sous-requête : Une requête imbriquée dans d'autres requêtes est appelée une requête. La sous-requête est également appelée requête interne, et l'instruction contenant la sous-requête est appelée requête externe (également appelée requête principale). Toutes les sous-requêtes peuvent être divisées en deux catégories, à savoir les sous-requêtes corrélées et les sous-requêtes non corrélées (1) Une sous-requête non corrélée est une sous-requête indépendante de la requête externe. La sous-requête est exécutée une fois au total et la valeur est transmise à la requête externe après l'exécution. (2) L'exécution de la sous-requête concernée dépend des données de la requête externe. Lorsque la requête externe exécute une ligne, la sous-requête est exécutée une fois. Par conséquent, les sous-requêtes non corrélées sont plus efficaces que les sous-requêtes corrélées 17. char Quelle est la différence entre varchar et varchar ? Réponse : Il s'agit d'un type de longueur fixe et varchar est un type de longueur variable. La différence entre eux est : Dans une colonne de données de type char(M), chaque valeur occupe M octets. Si une longueur est inférieure à M, MySQL la remplira avec des espaces à droite. (Les espaces de remplissage seront supprimés lors de l'opération de recherche.) Dans une colonne de données de type varchar(M), chaque valeur n'occupe que juste assez d'octets plus un octet pour enregistrer sa longueur (c'est-à-dire que la longueur totale est L+1 octets ). varchar est applicable aux scénarios : La longueur maximale de la liste de chaînes est beaucoup plus grande que la longueur moyenne 2. Chaîne Rarement mise à jour, sujette à la fragmentation du stockage 3. Utilisez des jeux de caractères multi-octets pour stocker les chaînes Cscénario har : stocke des chaînes d'une longueur approximative (valeur md5, carte d'identité, numéro de téléphone portable) et d'une longueur relativement courte (car varchar a besoin d'espace supplémentaire pour enregistrer la longueur de la chaîne), ce qui est plus approprié pour les mises à jour fréquentes String, il n'y aura pas de fractionnement de page lors de la mise à jour, évitera la fragmentation du stockage et obtiendra de meilleures performances io 18. Moteur de stockage MySQL, la différence entre myisam et innodb. Réponse : Expression simple : MyISAM est un moteur de stockage non transactionnel adapté aux applications avec des requêtes fréquentes ; ; Verrouillage de table, pas de blocage ; adapté aux petites données, petite concurrence innodb est un moteur de stockage qui prend en charge les transactions adaptées aux applications avec de nombreuses opérations d'insertion et de mise à jour ; Il s'agit d'un verrou de ligne (la plus grande différence réside dans le niveau du verrou) adapté au big data et à la grande simultanéité. 19. Quels sont les types de tables de données Réponse : MyISAM, InnoDB, HEAP, BOB, ARCHIVE, CSV, etc. MyISAM : mature, stable, facile à gérer, rapide à lire. Certaines fonctions ne prennent pas en charge (transactions, etc.) les verrous au niveau de la table. InnoDB : prend en charge les transactions, les clés étrangères et d'autres fonctionnalités, ainsi que le verrouillage des lignes de données. Il prend beaucoup de place et ne prend pas en charge l'indexation en texte intégral, etc. 20. La base de données MySQL est utilisée comme stockage du système de publication. L'augmentation de plus de 50 000 éléments par jour devrait durer trois ans. a. Concevez une structure de base de données bien conçue, autorisez une redondance partielle des données et essayez d'éviter les requêtes de jointure pour améliorer l'efficacité. b. Sélectionnez le type de données de champ de table et le moteur de stockage appropriés, et ajoutez les index de manière appropriée. c. Séparation maître-esclave de la bibliothèque MySQL en lecture et en écriture. d. Recherchez des tables régulières pour réduire la quantité de données dans une seule table et améliorer la vitesse des requêtes. e. Ajoutez des mécanismes de mise en cache, tels que memcached, apc, etc. f. Générez des pages statiques pour les pages qui ne changent pas fréquemment. g. Écrivez du SQL efficace. Par exemple, SELECT * FROM TABEL est remplacé par SELECT field_1, field_2, field_3 FROM TABLE. 21 Pour les sites Web à fort trafic, quelle méthode utilisez-vous pour résoudre le problème des statistiques. de visites de pages ? Réponse : a. Confirmez si le serveur peut prendre en charge le trafic actuel. b. Optimiser l'accès à la base de données. c. Interdire l'accès externe aux liens (hotlinking), comme le hotlinking d'images. d. Contrôler les téléchargements de fichiers. e. Utilisez différents hôtes pour répartir le trafic. f. Utiliser un logiciel de statistiques de navigation pour comprendre le nombre de visites et effectuer une optimisation ciblée. 4. Comment optimiser SQL ? (Les élèves peuvent comprendre les explications suivantes et exprimer le sens général en fonction de leur propre compréhension) Réponse : (1) Choisissez le bon moteur de stockage Prenons MySQL comme exemple, comprenant deux moteurs de stockage MyISAM et InnoDB, chaque moteur a des avantages et les inconvénients. MyISAM convient aux applications qui nécessitent un grand nombre de requêtes, mais il n'est pas très bon pour un grand nombre d'opérations d'écriture. Même si vous avez juste besoin de mettre à jour un champ, la table entière sera verrouillée et les autres processus, même le processus de lecture, ne pourront pas fonctionner tant que l'opération de lecture n'est pas terminée. De plus, MyISAM est extrêmement rapide pour les calculs tels que SELECT COUNT(*). La tendance d'InnoDB sera un moteur de stockage très complexe, et pour certaines petites applications, il sera plus lent que MyISAM. Mais il prend en charge le "verrouillage des lignes", ce sera donc mieux lorsqu'il y aura de nombreuses opérations d'écriture. De plus, il prend également en charge des applications plus avancées, telles que les transactions. (2) Optimiser le type de données du champ Rappelez-vous un principe, plus le la colonne sera plus rapide. Si une table ne comporte que quelques colonnes (comme une table de dictionnaire, une table de configuration), alors nous n'avons aucune raison d'utiliser INT comme clé primaire. Il sera plus économique d'utiliser MEDIUMINT, SMALLINT ou un TINYINT plus petit. Si vous n'avez pas besoin de suivre l'heure, il est préférable d'utiliser DATE plutôt que DATETIME. Bien entendu, vous devez également laisser suffisamment de place à l’expansion. (3) Ajouter un index au champ de recherche L'index ne signifie pas nécessairement le clé primaire ou le champ Unique. S'il y a un champ dans votre table que vous utiliserez toujours pour la recherche, il est préférable de l'indexer. À moins que le champ que vous souhaitez rechercher soit un champ de texte volumineux, vous devez alors créer un index de texte intégral. (4) Évitez d'utiliser Select *. Plus les données sont lues dans la base de données, plus la requête deviendra lente. De plus, si votre serveur de base de données et votre serveur WEB sont deux serveurs indépendants, cela augmentera également la charge de transmission réseau. Même si vous souhaitez interroger tous les champs de la table de données, essayez de ne pas utiliser le caractère générique *. Faire bon usage des définitions d'exclusion de champs intégrées peut apporter plus de commodité. (5) Utilisez ENUM au lieu de VARCHAR Le type ENUM est très rapide et compact. En fait, il contient un TINYINT, mais il apparaît sous la forme d'une chaîne. De cette façon, il devient tout à fait parfait d'utiliser ce champ pour faire des listes de choix. Par exemple, si les valeurs de champs tels que le sexe, l'origine ethnique, le département et le statut sont limitées et fixes, vous devez utiliser ENUM au lieu de VARCHAR. (6) Utilisez NOT NULL autant que possible Sauf si vous avez une raison très particulière d'utiliser NULL valeur, vous devez toujours garder vos champs NON NULL. NULL nécessite en fait un espace supplémentaire et votre programme sera plus complexe lorsque vous effectuerez des comparaisons. Bien sûr, cela ne signifie pas que vous ne pouvez pas utiliser NULL. La réalité est très compliquée et il y aura toujours des situations dans lesquelles vous devrez utiliser des valeurs NULL. (7) Le tableau de longueur fixe sera plus rapide si tous les champs du tableau sont " de longueur fixe " , la table entière sera considérée comme « statique » ou « de longueur fixe ». Par exemple, la table ne contient aucun champ des types suivants : VARCHAR, TEXT, BLOB. Tant que vous incluez l'un de ces champs, la table n'est plus une "table statique de longueur fixe" et le moteur MySQL la traitera d'une autre manière. Les tables de longueur fixe amélioreront les performances car MySQL recherchera plus rapidement car ces longueurs fixes facilitent le calcul du décalage des données suivantes. C'est quantitatif, donc la lecture sera naturellement rapide. Et si le champ n'est pas de longueur fixe, chaque fois que vous souhaitez trouver le suivant, le programme doit trouver la clé primaire. De plus, les tables de longueur fixe sont plus faciles à mettre en cache et à reconstruire. Cependant, le seul effet secondaire est que les champs de longueur fixe gaspillent de l'espace, car les champs de longueur fixe nécessitent beaucoup d'espace, que vous les utilisiez ou non. 22, est dans table Sélectionnez le type de données approprié pour le champ (conception physique) Priorité du type de champ : entier>date,heure>enum,char>varchar>blob,text Donnez la priorité aux types numériques, suivis des types dates ou binaires, et enfin des types chaîne. Pour les types de données de même niveau, la priorité doit être donnée aux données. qui prend moins de place 23 : Période de stockage Dheure : AAAA-MM. -DD HH:MM : Le format SS stocke l'heure de la période, précise à la seconde près, occupe 8 octets d'espace de stockage, le type de données et d'heure n'a rien à voir avec le fuseau horaire Timestamp : au format timestamp Stockage, occupe 4 octets, varie de 1970-1-1 à 2038-1-19 L'affichage dépend du fuseau horaire spécifié. Par défaut, la valeur de la colonne timestamp peut être automatiquement modifiée lorsque le. les données de la première ligne de la colonne sont modifiées Date : (Anniversaire) prend moins d'octets que l'utilisation de string.datatime.int pour stocker. L'utilisation de la date ne nécessite que 3 octets pour stocker la date et le mois, ce qui est bien. la fonction date et heure pour calculer la période de date Heureime : stocker les données de la partie horaire Remarque : N'utilisez pas le type de chaîne pour stocker les données de date et d'heure (prend généralement moins d'espace de stockage que les chaînes, vous pouvez utiliser les fonctions de date lors de la recherche et du filtrage) Utiliser int pour stocker la date et l'heure n'est pas aussi efficace que d'utiliser le type d'horodatage. Recommandations associées :
27. Expliquez la différence entre les jointures externes MySQL, les jointures internes et les auto-jointures
Jointure externe L'ensemble de résultats contient non seulement des lignes qui répondent aux conditions de jointure, mais également Toutes les lignes de données du tableau de gauche, du tableau de droite ou
dans les deux tableaux sont appelées jointure externe gauche, jointure externe droite et jointure externe complète. 28. Écrivez les noms de plus de trois moteurs de stockage de bases de données MySQL (astuce : ne respectez pas la casse)
Archive, CSV, Blackhole, MaxDB et plus d'une douzaine de moteurs33. Présentation du mécanisme d'annulation de transaction dans Myql
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!