prémisse
Pendant le processus de réglage, utilisez des
explain
commandes pour afficher le processus d'exécution, y compris l'heure d'exécution, le mode d'analyse, si les index sont utilisés, etc., EXPLIQUEZ l'analyse de l'utilisation
开启查询sql执行时间:
\timing on
关闭查询sql执行时间:
\timing off
1. Description du problème
Une interface de requête est appelée fréquemment et le processus de requête est lent
2. Idées d'optimisation
- Envisagez d'abord d'optimiser les instructions SQL
- Envisagez ensuite d'optimiser le code métier
- Enfin, déterminez si vous devez ajouter un mécanisme de mise en cache
3. Processus d'optimisation
3.1 Optimiser SQL
SQL d'origine, regroupez les données de requête avec le plus grand seq_id de chaque groupe, utilisez dans + group by pour atteindre
select name, version from yc_test where seq_id in(
select max(seq_id) from yc_test group by name
);
3.1.1 Idées d'optimisation SQL
- Envisagez d'ajouter des index pour accélérer la requête
in
Sera convertior
et convertiunion all
, l'efficacité est inférieure. Pensez à utiliserexists
ou àjoin
remplacer. Pourquoi?
3.1.2 SQL optimisé
select a.name, a.version from yc_test a inner join (
select max(seq_id) as seq_id from yc_test group by name
) b on a.seq_id=b.seq_id;
3.1.3 Comparaison avant et après optimisation SQL
Explique:
sql | avantage | Désavantage |
---|---|---|
en mise en œuvre | sql simple | in sera converti en or puis en union all, ce qui est moins efficace, comme le montre la figure pour une couche supplémentaire de boucle |
implémentation de jointure interne | Réduisez une couche de circulation et améliorez l'efficacité | En revanche, SQL est plus compliqué |
3.2 Optimiser le code métier
En combinant des scénarios métier fonctionnels (qui peuvent être considérés comme des enregistrements historiques), lisez le code et constatez que toutes les données ne doivent pas être conservées.
Solution d'optimisation:
定时器
Nettoyez régulièrement les données expirées pour réduire la redondance des données业务逻辑
Contrôlez, jugez s'il y a des données supplémentaires lors de l'enregistrement des données et supprimez les données supplémentaires s'il y en a.
3.3 Ajouter un mécanisme de mise en cache
热点数据
, Vous pouvez envisager la mise en cache en mémoire (cache variable) ou le stockage dans la base de données (Redis / Memcached).
Puisque la quantité de données a été contrôlée et combinée à une planification ultérieure, aucun mécanisme de mise en cache n'a été ajouté.