Maison > Article > base de données > Cet article vous donnera une compréhension rapide des requêtes lentes dans MySQL
Qu'est-ce qu'une requête lente MySQL ? En fait, l'instruction SQL de requête prend beaucoup de temps. Combien de temps faut-il pour calculer une requête lente ? Cela varie en fait d'une personne à l'autre. Certaines entreprises ont un seuil de requête lente de 100 ms, et d'autres peuvent avoir un seuil de 500 ms. Autrement dit, si la durée de la requête dépasse ce seuil, elle est considérée comme une requête lente.
Dans des circonstances normales, MySQL n'activera pas automatiquement les requêtes lentes, et s'il est activé, le seuil par défaut est de 10 secondes
# slow_query_log 表示是否开启 mysql> show global variables like '%slow_query_log%'; +---------------------+--------------------------------------+ | Variable_name | Value | +---------------------+--------------------------------------+ | slow_query_log | OFF | | slow_query_log_file | /var/lib/mysql/0bd9099fc77f-slow.log | +---------------------+--------------------------------------+ # long_query_time 表示慢查询的阈值,默认10秒 show global variables like '%long_query_time%'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+2. Les méfaits des requêtes lentes
Nous devons attendre longtemps pour accéder à quelque chose ou sauvegarder quelque chose, alors ne devrions-nous pas abandonner chaque minute ? Attendez, je sais que l'expérience sera mauvaise, mais définir le seuil de requête lente à 100 ms semble trop bas. Il devrait être acceptable que j'accède à quelque chose pendant 1 à 2 secondes. En fait, ce seuil n'est pas trop bas, car c'est le seuil d'un SQL, et vous devrez peut-être vérifier le SQL plusieurs fois pour une interface, et il est très courant même d'ajuster l'interface externe.
2. Cela occupe la mémoire MySQL et affecte les performancesLa mémoire MySQL est intrinsèquement limitée (une grande mémoire nécessite de l'argent supplémentaire !). Pourquoi les requêtes SQL sont-elles lentes ? Parfois, c'est parce que vous analysez la table entière et interrogez une grande quantité de données, associée à divers filtres, que cela devient lent. Par conséquent, les requêtes lentes signifient souvent une augmentation de l'utilisation de la mémoire. Lorsque la mémoire est élevée, les requêtes SQL peuvent être. transportés deviennent moins nombreux et les performances se détériorent.
3. Provoque le blocage des opérations DDLComme nous le savons tous, le moteur InnoDB ajoute des verrous de ligne par défaut, mais les verrous sont en fait ajoutés à l'index. Si la condition de filtre ne crée pas d'index, il sera rétrogradé. à un verrou de table. La plupart des raisons de la lenteur des requêtes sont dues au manque d'index. Par conséquent, si le temps de requête lent est trop long, le temps de verrouillage de la table sera également très long. Si DDL est exécuté à ce moment-là, cela provoquera un blocage.
3. Scénarios courants de requêtes lentesSi
aucun indexn'est ajouté, cela entraînera une analyse complète de la table ou l'index n'est pas atteint (ou l'index n'est pas le bon ; index optimal) , ces deux situations entraîneront une augmentation du nombre de lignes analysées, ce qui entraînera des temps de requête plus lents. Ce qui suit est un exemple de mon test :
# 这是我的表结构,算是一种比较常规的表 create table t_user_article ( id bigint unsigned auto_increment primary key, cid tinyint(2) default 0 not null comment 'id', title varchar(100) not null, author varchar(15) not null, content text not null, keywords varchar(255) not null, description varchar(255) not null, is_show tinyint(1) default 1 not null comment ' 1 0', is_delete tinyint(1) default 0 not null comment ' 1 0', is_top tinyint(1) default 0 not null comment ' 1 0', is_original tinyint(1) default 1 not null, click int(10) default 0 not null, created_at timestamp default CURRENT_TIMESTAMP not null, updated_at timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP ) collate = utf8mb4_unicode_ci;
Sous la structure de tableau ci-dessus, j'ai généré aléatoirement un lot de données à tester via
ce site Web. On peut voir que sans indexation, il y a essentiellement 50 000 éléments de données. Ensuite. des requêtes lentes commenceront à apparaître (en supposant que le seuil est de 100 ms)[Fill Database](https://filldb.info/)
Nombre de champs | Type de requête | Temps de requête | |
---|---|---|---|
* | Table complète (TOUS ) | Environ 80ms | |
* | Table complète (TOUS) | Environ 120ms | |
* | Table complète (TOUS) | Environ 180ms |
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!