mysql optimisation - Comment optimiser la vitesse des requêtes mysql count(id)?
某草草
某草草 2017-05-18 10:51:05
0
7
971

La structure du tableau est celle indiquée sur la figure.

Le volume de données actuel est de 8 000 W de lignes.

Avez-vous des méthodes et des idées d'optimisation ?

某草草
某草草

répondre à tous(7)
Ty80

count(*) ne compte pas la valeur de chaque colonne (qu'elle soit nulle ou non), mais compte directement le nombre de lignes, ce qui est plus efficace ;

Vous pouvez également utiliser la méthode d'élimination. Par exemple, si la plateforme est qq et qu'il y a beaucoup de données, vous pouvez utiliser les données totales pour soustraire les données de platform=other;

D'un point de vue commercial, le coût pour obtenir des valeurs précises est très élevé, mais le coût des valeurs approximatives est inférieur si les exigences ne sont pas strictes, des valeurs approximatives peuvent être utilisées à la place. 🎜#

Vous pouvez également envisager d'utiliser une "base de données mémoire" telle que Redis pour maintenir cette acquisition de données chronophage ;
仅有的幸福

1. Si je rencontre un tel problème, ma solution est de créer une nouvelle table, telle que playfrom_count pour les statistiques.
Il serait préférable d'utiliser des méthodes comme after_insert et after_delete dans le framework. Sinon, écrivez-en une vous-même.
. Si le volume d'une telle requête n'est pas très important, ou s'il n'est pas très précis, vous pouvez effectuer une tâche pour l'exécuter de temps en temps
3. ajouté où, il analysera toute la table. Vous pouvez donc augmenter la vitesse de récupération en ajoutant une clé primaire.

仅有的幸福

Option 1. Créez une table de partition pour la plateforme
Option 2. Divisez la table par plateforme
Option 3. Créez un index séparé pour la plateforme, mais étant donné que l'ensemble de valeurs de votre plateforme ne doit pas être très grand, ce n'est pas le cas approprié de faire cet index

曾经蜡笔没有小新

Ce problème sera rencontré dans les bases de données relationnelles classiques. La solution générale consiste à accéder à la table système, qui contient le nombre de lignes de données dans chaque table, ce qui est infiniment plus rapide que votre COUNT(*).

我想大声告诉你

Mettez à niveau votre machine. Même un simple décompte prend 20 secondes. Bien qu'il existe de nombreuses méthodes telles que les tables de partition, je pense que l'investissement n'en vaut pas la peine.

左手右手慢动作

Il est recommandé de considérer d'abord les besoins du scénario commercial. Le coût d'une solution purement technique est trop élevé et, dans de nombreux cas, il est pratiquement impossible de la mettre en œuvre.
Les solutions possibles sont :
1. Diviser les tables : diviser en plusieurs tables selon la plate-forme. Le moteur de stockage est MyISAM. L'instruction de requête est modifiée en count(*). dans le tableau, l'efficacité des requêtes est donc grandement améliorée. Il est nécessaire de prendre en compte la charge de travail de transformation du système causée par les sous-tables et de savoir si MyISAM peut répondre aux exigences du système car MyISAM ne prend pas en charge les transactions.

2. Créez des tables ou des champs redondants et recalculez les données qui doivent être résumées lorsqu'elles changent. Vous devez vous demander si un grand nombre d'opérations de mise à jour augmenteront la charge du système.

3. Si les résultats de la requête ne doivent pas être complètement précis, les résultats peuvent être calculés régulièrement et enregistrés lors de l'interrogation, la table d'origine n'est pas directement interrogée.

伊谢尔伦

Dans ce cas, il peut être divisé en plusieurs tableaux statistiques selon les mois ou les trimestres. Par exemple, si vous avez 8 millions de données, créez un nouveau tableau et chaque ligne représente le total des enregistrements d'un mois. De cette façon, les statistiques seront beaucoup plus rapides.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal