Maison > Article > base de données > Introduction à l'environnement de test MySQL avec des millions de données
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!