Maison > Article > base de données > Utilisation de count() dans une grande table mysql et optimisation de count() dans mysql
Le contenu que cet article vous apporte concerne l'utilisation de count() dans les grandes tables MySQL et l'optimisation de count() dans MySQL. Il a une certaine valeur de référence. J'espère que les amis dans le besoin pourront s'y référer. être utile pour vous aidé.
Une seule table contient plus de 60 millions de données, mais vous ne pouvez pas la diviser. Vous devez compter séparément la quantité de données contenues dans la table, le nombre de produits A et le nombre de produits B
.Avant l'optimisation, la structure de la table est la suivante. Afin de masquer le contenu, j'ai flouté les champs correspondants
CREATE TABLE `xxxx` ( `link` varchar(200) DEFAULT NULL, `test0` varchar(500) DEFAULT NULL, `test1` varchar(50) DEFAULT NULL, `test2` int(11) DEFAULT NULL, `test3` varchar(20) DEFAULT NULL, `test4` varchar(50) DEFAULT NULL, `test5` varchar(50) NOT NULL, `inserttime` datetime DEFAULT NULL, `test6` bit(1) NOT NULL DEFAULT b'0', `A` bit(1) NOT NULL DEFAULT b'0', `B` bit(1) NOT NULL DEFAULT b'0' , PRIMARY KEY (`test5`), KEY `test6` (`test6`) USING BTREE, KEY `A` (`A`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Il s'agit d'une table InnoDB classique, donc son nombre (*) est comparé. à L'efficacité de MyISAM est beaucoup plus lente et le nombre de lignes affichées par InnoDB n'est pas très précis, je dois donc le compter ici. Il existe plusieurs stratégies
Un total de 61 500 000 données
compte. (*) consommation Temps 1539,499s
count(1) Prend du temps 907,581s
count(A) Compte l'index.
count(test6) Compte la clé primaire.
Sans exception, comme ce tableau n'est pas bien optimisé, chacun des éléments ci-dessus prendra des milliers de secondes, ce qui nous est intolérable.
Nous allons maintenant commencer à analyser et à résoudre ce problème .
On s'attend à ce que le nombre (*) de la table entière soit normal dans les 200 secondes, bon dans les 100 et excellent dans les 50.
Tout d'abord, j'en ai extrait test6 et formé une table séparée. Faites-le fonctionner
Un total de 61 500 000 données
count(*) prend 10,238s
count(1) prend 8,710s
count. (test6) Droite Le décompte de la clé primaire prend 12,957 s
parmi lesquels count(1)
est le plus efficace, et est plus rapide que le plus lent count(pk)
de 52,0%
Utilisez count (1) Au lieu de count(*) pour récupérer.Recommandations associées :
Implémentation du code de la classification Infinitus dans MySQL
Résumé des méthodes d'optimisation des bases de données Mysql (à lire absolument)
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!