Maison >base de données >tutoriel mysql >Introduction à l'environnement de test MySQL avec des millions de données

Introduction à l'environnement de test MySQL avec des millions de données

藏色散人
藏色散人avant
2019-04-17 17:19:453821parcourir

Mysql est largement utilisé comme une très excellente base de données gratuite. Habituellement, les données des projets que nous développons dépassent rarement le million. Récemment, j'ai consacré beaucoup de temps à des recherches approfondies sur l'optimisation de MySQL dans le cas de millions de données. J'ai rencontré de nombreux problèmes et les ai résolus, j'aimerais donc les partager avec vous. Vos précieux avis sont les bienvenus !

Recommandations associées : "Tutoriel MySQL"

Environnement de test

Le nombre total de données est de 3 millions, occupant environ 1 Go d'espace disque

Structure des données

表1 news [ 文章表 引擎 myisam 字符集 utf-8 ]
-----------------------------------------------------
idint11主键自动增加
cateint11索引
titlevarchar200标题(便于基础搜索做了索引)
contenttext文章正文
dateint11文章发布时间(时间戳形式)
表2 cate [ 文章分类表 引擎 myisam 字符集 utf-8 ]
-----------------------------------------------------
cate_idint11主键自动增加
cate_namevarchar200文章标题

Nombre total de requêtes

myIsam 引擎下
select count(*) as total from news
//耗时 0.001秒 极快 
//带上条件
select count(*) as total from news where cate = 1
耗时 0.046秒 可以接受的速度
innodb 引擎下
select count(*) as total from news
//耗时 0.7秒 很慢
select count(*) as total from news where cate = 1
耗时 0.7秒 很慢

Pourquoi 2 Y a-t-il une si grande différence de vitesse de requête entre les deux moteurs ?

InnoDB n'enregistre pas le nombre spécifique de lignes dans la table, c'est-à-dire que lors de l'exécution de select count(*) from table, InnoDB doit analyser la table entière pour calculer le nombre de lignes qu'elle contient. sont.

MyISAM lit simplement le nombre de lignes enregistrées.

Notez que lorsque l'instruction count(*) contient la condition Where, les opérations des deux tables sont quelque peu différentes. Les tables de type InnoDB utilisent count(*) ou count (clé primaire), plus la condition Where col. . La colonne col est une colonne avec un index de contrainte unique autre que la clé primaire de la table. De cette façon, la vitesse des requêtes sera très rapide. C'est pour éviter une analyse complète de la table.

Résumé

mysql utilise count(*) pour interroger le nombre total de données avec 3 millions de données (moteur myisam) et contient des conditions (les index sont définis correctement ) et la durée de fonctionnement est normale. Pour les données fréquemment lues, nous vous recommandons d'utiliser le moteur myIsam.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer