Ma compréhension de MySQL Partie 3 : Plan d'exécution
La colonne Base de données MySQL d'aujourd'hui présente les plans d'exécution associés.
Le troisième blog de la série MySQL, le contenu principal est l'analyse du plan d'exécution Explain dans MySQL Si vous savez déjà comment analyser le plan d'exécution. , alors pour SQL, le réglage est simple.
En regardant les exigences professionnelles de nombreux fabricants de premier et deuxième rang, ceux qui conçoivent des bases de données auront certainement besoin d'une expérience dans le réglage SQL. C'est presque devenu une question d'entretien « à développement en huit parties » à égalité avec Spring. .
Pour effectuer le réglage SQL, vous devez d'abord connaître l'état d'exécution de SQL. Le sentiment le plus intuitif est bien sûr le temps d'exécution de l'instruction SQL. Cependant, en plus, nous pouvons également analyser l'instruction SQL. le plan d'exécution pour effectuer le réglage.
1. Expliquez brièvement
L'instruction Explain peut voir comment MySQL exécute cette instruction SQL, y compris l'utilisation des index, le nombre de lignes analysées, etc. Ces informations sont très utiles pour le réglage SQL. . C’est important, vous devez donc d’abord comprendre le plan d’exécution.
mysql> explain select * from user where name='one'; +----+-------------+-------+------------+------+---------------+------+---------+-------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+---------------+------+---------+-------+------+----------+-------------+| 1 | SIMPLE | user | NULL | ref | a | a | 13 | const | 1 | 100.00 | Using index | +----+-------------+-------+------------+------+---------------+------+---------+-------+------+----------+-------------+1 row in set, 1 warning (0.00 sec)复制代码
Ce qui précède est le plan d'exécution d'une simple instruction de requête. Ce tableau comporte un total de 12 champs, chacun représentant des significations différentes. Ils sont décrits un par un ci-dessous.
-
id
: Indique l'ordre d'exécution de SQL. Plus la valeur est grande, plus la priorité est élevée. Si les valeurs sont les mêmes, l'ordre d'exécution est déterminé par l'optimiseur. -
select_type
: Indique le type d'instruction de requête de sélection -
table
: Le nom de la table (ou l'alias de la table) interrogé par l'instruction SQL, ou il peut s'agir d'un nom non- table existante telle qu'une table temporaire -
partitions
: les informations de partition impliquées dans l'instruction de requête -
type
: le type d'association (type d'accès) détermine la manière dont MySQL recherche les lignes dans le tableau. La performance du pire au meilleur estALL
,index
,range
,index_merge
,ref
,eq_ref
,const
,system
,NULL
-
possible_keys
: Affiche tous les index pouvant être utilisés par l'instruction de requête -
key
: Affiche le nom de l'index décidé par l'optimiseur -
key_len
: Affiche la longueur de l'index utilisée par MySQL Number de sections -
ref
: Colonne ou constante utilisée pour retrouver une valeur dans l'index de l'key
enregistrement de colonne -
rows
: Estimation du nombre de lignes à parcourir -
filtered
: Le pourcentage du nombre de lignes qui satisfont finalement l'instruction de requête par rapport au nombre total de lignes renvoyées par le moteur de stockage -
Extra
: Autres informations d'exécution
Ce qui précède concerne uniquement chaque champ de l'explication du nom du tableau du plan d'exécution, je vais ensuite utiliser des exemples pratiques pour aider tout le monde (moi-même) à mieux comprendre ces champs importants select_type
, type
, key_len
, rows
, Extra
.
2. Expliquez en détail
2.1 Exemple de structure de table
Présentez d'abord l'exemple de structure de table et les lignes de données qui seront utilisées dans cet article :
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(36) DEFAULT NULL COMMENT '姓名', `age` int(11) NULL DEFAULT NULL COMMENT '年龄', `email` varchar(36) DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (`id`) USING BTREE, INDEX `idx_age_name`(`age`, `name`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1;复制代码
Insérez 1 000 000 de données de test dans le tableau via une fonction.
CREATE DEFINER=`root`@`localhost` PROCEDURE `idata`()begin declare i int; set i=1; while(i<=1000000)do insert into user(id,name,age,email) values(i, CONCAT('name',i), i % 50, concat(i,'name@email.cn')); set i=i+1; end while;end复制代码
2.2 select_type dans Explain
Le champ select_type
dans le plan d'exécution représente le type d'instruction de requête de sélection. Les types courants sont :
SIMPLE
. : instruction de requête simple, excluant les sous-requêtes et les associations, telles que :
mysql> explain select * from user where id=1; +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| 1 | SIMPLE | user | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL | +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+1 row in set, 1 warning (0.00 sec)复制代码
2.2.1 PRIMARY
Si l'instruction de requête contient des sous-parties complexes, alors la partie la plus externe sera marquée comme PRIMARY
, tel que :
mysql> explain select * from user where id=(select id from user where id=1); +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+| 1 | PRIMARY | user | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL | | 2 | SUBQUERY | user | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | Using index | +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+2 rows in set, 1 warning (0.00 sec)复制代码
Dans le plan d'exécution de cette instruction SQL, le premier SQL exécuté, c'est-à-dire select * from yser where id = (...)
, est marqué comme PRIMARY
2.2 .2 SUBQUERY
La sous-requête contenue dans le contenu select ou Where sera marquée comme SUBQUERY
Par exemple, la deuxième instruction du plan d'exécution de l'exemple SQL précédent, c'est-à-dire le select id from user where id=1
de sera marqué select_type
. SUBQUERY
, le résultat sera stocké dans une table temporaire, telle que : DERIVED
mysql> explain select * from (select id,name,count(*) from user where id=1) as user_1 where id=1; +----+-------------+------------+------------+--------+---------------+---------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+------------+------------+--------+---------------+---------+---------+-------+------+----------+-------+| 1 | PRIMARY | <derived2> | NULL | system | NULL | NULL | NULL | NULL | 1 | 100.00 | NULL | | 2 | DERIVED | user | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL | +----+-------------+------------+------------+--------+---------------+---------+---------+-------+------+----------+-------+2 rows in set, 1 warning (0.00 sec)复制代码
est select id,name,count(*) from user where id=1
. DERIVED
2.3 tapez ExplainIl existe 12 types de requêtes au total Pour des explications spécifiques, veuillez consulter le document officiel - expliquer_select_type
select_type
champ C'est une base très importante pour mesurer SQL dans le plan d'exécution. Il montre le type d'association (type d'accès) de l'instruction SQL et détermine comment MySQL recherche les lignes dans la table. type
type
字段的值性能从最差到最优依次是 ALL, index, range, index_merge, ref, eq_ref, const, system
。
为了能更好地理解各个类型的含义,我对上述每一种类型都举出了相应的示例。
并未全部列出,完整的解释可以看官方文档-EXPLAIN Join Types
2.3.1 ALL
ALL
表示全表扫描,意味着存储引擎查找记录时未走索引,所以它是性能最差的一种访问类型,如
mysql> explain select * from user where age+2=20; +----+-------------+-------+------------+------+---------------+------+---------+------+---------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+---------------+------+---------+------+---------+----------+-------------+| 1 | SIMPLE | user | NULL | ALL | NULL | NULL | NULL | NULL | 1002301 | 100.00 | Using where | +----+-------------+-------+------------+------+---------------+------+---------+------+---------+----------+-------------+1 row in set, 1 warning (0.00 sec)复制代码
可以看到 rows
行的值为1002301,即扫描了全表的所有数据(扫描行数的值实际为估算),如果在生产环境有这样的 SQL,绝对是要优化的。
我们知道在 where 查询条件中,不应该对查询字段使用函数或表达式(应该写在等号不等号右侧),不了解此内容的可以看看我的上一篇博客 —— 我所理解的MySQL(二)索引。
这条查询语句在优化后应该是: select * from user where age=18
,去掉等号左侧的表达式,优化后的执行计划如下:
mysql> explain select * from user where age=18; +----+-------------+-------+------------+------+---------------+--------------+---------+-------+-------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+---------------+--------------+---------+-------+-------+----------+-------+| 1 | SIMPLE | user | NULL | ref | idx_age_name | idx_age_name | 5 | const | 39360 | 100.00 | NULL | +----+-------------+-------+------------+------+---------------+--------------+---------+-------+-------+----------+-------+1 row in set, 1 warning (0.00 sec)复制代码
2.3.2 index
index
表示全索引树扫描,由于扫描的是索引树,所以比 ALL
形式的全表扫描性能要好。
同时,由于索引树本身就是有序的,可以避免排序。
mysql> explain select id,age from user where name='name1'; +----+-------------+-------+------------+-------+---------------+--------------+---------+------+---------+----------+--------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+---------------+--------------+---------+------+---------+----------+--------------------------+| 1 | SIMPLE | user | NULL | index | NULL | idx_age_name | 116 | NULL | 1002301 | 10.00 | Using where; Using index | +----+-------------+-------+------------+-------+---------------+--------------+---------+------+---------+----------+--------------------------+1 row in set, 1 warning (0.00 sec)复制代码
示例查询语句如上所述,当查询条件存在于联合索引 idx_age_name
中,但又无法直接使用该索引(由于最左前缀原则),同时查询列 id,age
也存在于联合索引中,无须通过回表来获取时,执行计划中的访问类型 type
列就会是 index
。
2.3.3 range
range
表示范围扫描,准确的说是基于索引树的范围扫描,扫描的是部分索引树,所以性能比 index
稍好。
需要注意的是,若使用 in
或者 or
时,也可以使用范围扫描。
mysql> explain select * from user where age>18 and age<20; +----+-------------+-------+------------+-------+---------------+--------------+---------+------+-------+----------+-----------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+---------------+--------------+---------+------+-------+----------+-----------------------+| 1 | SIMPLE | user | NULL | range | idx_age_name | idx_age_name | 5 | NULL | 36690 | 100.00 | Using index condition | +----+-------------+-------+------------+-------+---------------+--------------+---------+------+-------+----------+-----------------------+1 row in set, 1 warning (0.01 sec) mysql> explain select * from user where age=18 or age=20; +----+-------------+-------+------------+-------+---------------+--------------+---------+------+-------+----------+-----------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+---------------+--------------+---------+------+-------+----------+-----------------------+| 1 | SIMPLE | user | NULL | range | idx_age_name | idx_age_name | 5 | NULL | 78720 | 100.00 | Using index condition | +----+-------------+-------+------------+-------+---------------+--------------+---------+------+-------+----------+-----------------------+1 row in set, 1 warning (0.00 sec)复制代码
2.3.4 index_merge
index_merge
即索引合并,它表示在查询时 MySQL 会使用多个索引。
MySQL 在 where 语句中存在多个查询条件,并且其中存在多个字段可以分别使用到多个不同的索引,在这种情况下 MySQL 可以对多个索引树同时进行扫描,最后将它们的结果进行合并,如:
mysql> explain select * from user where id=1 or age=18; +----+-------------+-------+------------+-------------+----------------------+----------------------+---------+------+-------+----------+-----------------------------------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------------+----------------------+----------------------+---------+------+-------+----------+-----------------------------------------------------+| 1 | SIMPLE | user | NULL | index_merge | PRIMARY,idx_age_name | idx_age_name,PRIMARY | 5,4 | NULL | 39361 | 100.00 | Using sort_union(idx_age_name,PRIMARY); Using where | +----+-------------+-------+------------+-------------+----------------------+----------------------+---------+------+-------+----------+-----------------------------------------------------+1 row in set, 1 warning (0.00 sec)复制代码
上面这条查询语句中的 id=1 和 age=18 分别使用到了 PRIMARY
主键索引和 idx_age_name
联合索引,最后再将满足这两个条件的记录进行合并。
2.3.5 ref
ref
表示索引访问(索引查找),这种访问类型会出现在查询条件中以非聚簇索引列的常量值进行查询的情况。
比如在介绍全表扫描中优化后 SQL 的访问类型就是 ref
。
2.3.6 eq_ref
eq_ref
这种访问类型会出现在连接查询时,通过聚簇索引进行连接的情况,此类型最多只返回一条符合条件的记录。若表的聚簇索引为联合索引,所有的索引列必须是等值查询,如:
mysql> explain select * from user user1 inner join user user2 where user1.id=user2.id limit 10; +----+-------------+-------+------------+--------+---------------+---------+---------+---------------------+---------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+--------+---------------+---------+---------+---------------------+---------+----------+-------+| 1 | SIMPLE | user1 | NULL | ALL | PRIMARY | NULL | NULL | NULL | 1002301 | 100.00 | NULL | | 1 | SIMPLE | user2 | NULL | eq_ref | PRIMARY | PRIMARY | 4 | all_in_one.user1.id | 1 | 100.00 | NULL | +----+-------------+-------+------------+--------+---------------+---------+---------+---------------------+---------+----------+-------+2 rows in set, 1 warning (0.00 sec)复制代码
2.3.7 const
const
这种访问类型会出现在通过聚簇索引进行常量等值查询的情况,如:
mysql> explain select * from user where id=1; +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| 1 | SIMPLE | user | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL | +----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+1 row in set, 1 warning (0.00 sec)复制代码
2.4 key_len in Explain
在上一篇博客 —— 我所理解的MySQL(二)索引 中 5.2 部分字段匹配
中已经提到过关于索引长度的计算方式,这里再来总结一下。
2.4.1 字符类型
字符类型的字段若作为索引列,它的索引长度 = 字段定义长度 字符长度 + 是否默认NULL + 是否是变长字段*,其中:
-
字段定义长度
就是定义表结构时跟在字段类型后括号中的数字 -
字符长度
是常数,utf8=3, gbk=2, latin1=1
-
是否默认NULL
也是常数,若字段默认值为 NULL,该值为1,因为 NULL 需要额外的一个字节来表示;否则该值为0 -
是否是变长字段
也是常数,若该字段为变长字段,该值为2;否则该值为0
所谓的变长字段就是 varchar,它所占用的就是字段实际内容的长度而非定义字段时的长度。而定长字段,也就是 char 类型,它所占用的空间就是自定字段时的长度,若超过会被截取。
举个例子,为上述实例表中添加一个字符类型字段的索引。
alter table user add index idx_name(`name`);复制代码
然后通过 name 字段去做查询,查看执行计划。
mysql> explain select * from user where name='name1'; +----+-------------+-------+------------+------+---------------+----------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+---------------+----------+---------+-------+------+----------+-------+| 1 | SIMPLE | user | NULL | ref | idx_name | idx_name | 111 | const | 2 | 100.00 | NULL | +----+-------------+-------+------------+------+---------------+----------+---------+-------+------+----------+-------+1 row in set, 1 warning (0.01 sec)复制代码
可以看到,执行计划中 key_len
一列的值为 111。
根据上述索引长度的计算公式,name 列字段定义长度为36,字符集类型为默认的 utf8,该字段默认允许 NULL,同时该字段是可变长字段 varchar。
所以 idx_name
索引的索引长度=36*3+1+2=111,恰如执行计划中显示的值。
2.4.2 其他定长类型
对于定长类型的字段,其索引长度与它的数据类型长度是一致的。
数据类型 | 长度 |
---|---|
int | 4 |
bigint | 8 |
date | 3 |
datetime | 8 |
timestamp | 4 |
float | 4 |
double | 8 |
需要注意的是,若该字段允许默认值为 NULL,与字符类型一样,其索引长度也需要加上1。
mysql> explain select * from user where age=1; +----+-------------+-------+------------+------+---------------+--------------+---------+-------+-------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+---------------+--------------+---------+-------+-------+----------+-------+| 1 | SIMPLE | user | NULL | ref | idx_age_name | idx_age_name | 5 | const | 39366 | 100.00 | NULL | +----+-------------+-------+------------+------+---------------+--------------+---------+-------+-------+----------+-------+1 row in set, 1 warning (0.00 sec)复制代码
如上面这个示例(本示例中索引只用到了 age 字段),age 字段为 int 类型,其索引长度本应为 4,但由于 age 字段默认允许为 NULL,所以它的索引长度就变成了5。
2.5 rows in Explain
扫描行数在执行计划中其实是一个估值,MySQL 会选择 N 个不同的索引数据页,计算平均值得到单页索引基数,然后再乘以索引页面数,就得到了扫描行数的估值。
扫描行数就是优化器考量索引执行效率的因素之一,一般而言扫描行数越少,执行效率越高。
2.6 Extra in Explain
执行计划中 Extra
字段的常见类型有:
-
Using index
: 使用了覆盖索引,以避免回表 -
Using index condition
: 使用了索引下推,具体可以看我的上一篇博客 —— 我所理解的MySQL(二)索引 -
Using where
: 表示MySQL 会通过 where 条件过滤记录- 全表扫描:where 中有该表字段作为搜索条件
- 扫描索引树:where 中包含索引字段之外的其他字段作为搜索条件
-
Using temporary
: MySQL 在对查询结果排序时会使用临时表 -
Using filesort
: 对结果进行外部索引排序(文件排序),排序不走索引- 数据较少时在内存中排序,数据较多时在磁盘中排序
- 尽量避免该信息出现在执行计划中
相关免费学习推荐:mysql数据库(视频)
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Vous pouvez ouvrir PHPMYADMIN via les étapes suivantes: 1. Connectez-vous au panneau de configuration du site Web; 2. Trouvez et cliquez sur l'icône PHPMYADMIN; 3. Entrez les informations d'identification MySQL; 4. Cliquez sur "Connexion".

MySQL est un système de gestion de la base de données relationnel open source, principalement utilisé pour stocker et récupérer les données rapidement et de manière fiable. Son principe de travail comprend les demandes des clients, la résolution de requête, l'exécution des requêtes et les résultats de retour. Des exemples d'utilisation comprennent la création de tables, l'insertion et la question des données et les fonctionnalités avancées telles que les opérations de jointure. Les erreurs communes impliquent la syntaxe SQL, les types de données et les autorisations, et les suggestions d'optimisation incluent l'utilisation d'index, les requêtes optimisées et la partition de tables.

La position de MySQL dans les bases de données et la programmation est très importante. Il s'agit d'un système de gestion de base de données relationnel open source qui est largement utilisé dans divers scénarios d'application. 1) MySQL fournit des fonctions efficaces de stockage de données, d'organisation et de récupération, en prenant en charge les systèmes Web, mobiles et de niveau d'entreprise. 2) Il utilise une architecture client-serveur, prend en charge plusieurs moteurs de stockage et optimisation d'index. 3) Les usages de base incluent la création de tables et l'insertion de données, et les usages avancés impliquent des jointures multiples et des requêtes complexes. 4) Des questions fréquemment posées telles que les erreurs de syntaxe SQL et les problèmes de performances peuvent être déboguées via la commande Explication et le journal de requête lente. 5) Les méthodes d'optimisation des performances comprennent l'utilisation rationnelle des indices, la requête optimisée et l'utilisation des caches. Les meilleures pratiques incluent l'utilisation des transactions et des acteurs préparés

MySQL est choisi pour ses performances, sa fiabilité, sa facilité d'utilisation et son soutien communautaire. 1.MySQL fournit des fonctions de stockage et de récupération de données efficaces, prenant en charge plusieurs types de données et opérations de requête avancées. 2. Adoptez l'architecture client-serveur et plusieurs moteurs de stockage pour prendre en charge l'optimisation des transactions et des requêtes. 3. Facile à utiliser, prend en charge une variété de systèmes d'exploitation et de langages de programmation. 4. Avoir un solide soutien communautaire et fournir des ressources et des solutions riches.

Apache se connecte à une base de données nécessite les étapes suivantes: Installez le pilote de base de données. Configurez le fichier web.xml pour créer un pool de connexion. Créez une source de données JDBC et spécifiez les paramètres de connexion. Utilisez l'API JDBC pour accéder à la base de données à partir du code Java, y compris l'obtention de connexions, la création d'instructions, les paramètres de liaison, l'exécution de requêtes ou de mises à jour et de traitement des résultats.

Le processus de démarrage de MySQL dans Docker se compose des étapes suivantes: Tirez l'image MySQL pour créer et démarrer le conteneur, définir le mot de passe de l'utilisateur racine et mapper la connexion de vérification du port Créez la base de données et l'utilisateur accorde toutes les autorisations sur la base de données

L'installation de MySQL sur CENTOS implique les étapes suivantes: Ajout de la source MySQL YUM appropriée. Exécutez la commande YUM Install MySQL-Server pour installer le serveur MySQL. Utilisez la commande mysql_secure_installation pour créer des paramètres de sécurité, tels que la définition du mot de passe de l'utilisateur racine. Personnalisez le fichier de configuration MySQL selon les besoins. Écoutez les paramètres MySQL et optimisez les bases de données pour les performances.

La clé de l'installation de MySQL est d'élégance pour ajouter le référentiel MySQL officiel. Les étapes spécifiques sont les suivantes: Téléchargez la clé GPG officielle MySQL pour empêcher les attaques de phishing. Ajouter un fichier de référentiel MySQL: RPM -UVH https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm Mise à jour du référentiel Cache: Yum Update Installation Mysql: Yum install install install starting starting mysql Service: SystemCTL start start mysqld starger bugo boartup Service mysql Service: SystemCTL start start mysqld starger bugo bo onthing staring Service mysql Service: SystemCTL Start Start MySQLD Set Out Up Boaching Staring Service MySQL Service: SystemCTL Start Start MysQL
