Ce que cet article vous apporte concerne l'optimisation de types spécifiques de requêtes par MySQL (exemples de code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Optimiser les requêtes associées
Si vous souhaitez optimiser les requêtes qui utilisent des requêtes associées, nous devons porter une attention particulière aux points suivants :
1 . Assurez-vous que ON ou USING Il y a des index sur les colonnes de la clause. L'ordre des associations doit être pris en compte lors de la création d'index. Lorsque la table A et la table B sont liées à l'aide de la colonne c, si l'ordre d'association de l'optimiseur est B, A, alors il n'est pas nécessaire de créer un index sur la colonne correspondante de la table B. Sauf autre raison, il vous suffit de créer des index sur les colonnes correspondantes de la deuxième table dans la séquence d'association. Les index inutiles ne feront qu'apporter une charge supplémentaire.
2. Assurez-vous que toutes les expressions dans GROUP BY et ORDER BY n'impliquent que des colonnes dans une seule table, afin que MySQL puisse utiliser des index pour optimiser ce processus.
3. Lors de la mise à niveau de MySQL, vous devez faire attention à : la syntaxe d'association, la priorité des opérateurs et d'autres endroits qui peuvent changer.
Optimiser GROUP BY et DISTINCT
Dans de nombreux scénarios, MySQL utilise la même méthode pour optimiser ces deux requêtes. En fait, l'optimiseur MySQL le gérera en interne. convertir ces deux types de requêtes entre eux. Ils peuvent tous être optimisés à l’aide d’index, qui constituent également la méthode d’optimisation la plus efficace.
Lorsque l'index ne peut pas être utilisé, GROUP BY est réalisé en utilisant deux stratégies : en utilisant des tables temporaires ou en triant des fichiers pour le regroupement. Pour toute instruction de requête, les performances des deux stratégies peuvent être améliorées. Nous pouvons inviter SQL_BIG_RESULT et SQL_SMALL_RESULT pour que l'optimiseur se comporte comme vous le souhaitez.
Optimiser la pagination LIMIT
Lorsque des opérations de pagination sont nécessaires dans le système, nous utilisons généralement la méthode LIMIT plus offset pour l'implémenter et ajoutons la clause ORDER BY appropriée. S'il existe un index correspondant, l'efficacité sera généralement bonne, sinon MySQL devra effectuer de nombreuses opérations de tri de fichiers.
Mais un problème très courant et gênant est que lorsque le décalage est très grand, par exemple, il peut s'agir d'une requête comme LIMIT 10000,20. À ce stade, MySQL doit interroger 10020 enregistrements et renvoyer uniquement les enregistrements. dernier. 20 articles, le prix est très élevé.
Si toutes les pages sont consultées avec la même fréquence, alors une telle requête devrait accéder en moyenne à la moitié des données de la table. Pour optimiser ces requêtes, limitez le nombre de pages dans la page ou optimisez les performances pour les décalages importants.
L'un des moyens les plus simples d'optimiser de telles requêtes paginées consiste à utiliser des analyses de couverture d'index autant que possible au lieu d'interroger toutes les colonnes. Effectuez ensuite une opération de corrélation si nécessaire et renvoyez enfin les colonnes requises. Lorsque le décalage est important, l’efficacité de celui-ci sera grandement améliorée. Considérons la requête suivante :
SELECT file_id, description FROM sakila.film ORDER BY title LIMTI 50, 5;
Si cette table est grande, il est préférable de modifier cette requête pour qu'elle ressemble à ceci :
SELECT file.file_id, file.description FROM sakila.film INNER JOIN( SELECT film_id FROM sakila.film ORDER BY title LIMIT 50, 5 )
L'"association retardée" ici sera grandement Amélioration de l'efficacité des requêtes, il permet à MySQL d'analyser le moins de pages possible, d'obtenir les enregistrements auxquels il faut accéder, puis de renvoyer toutes les colonnes nécessaires pour interroger la table d'origine en fonction des colonnes associées.
Il existe une autre méthode d'optimisation, qui consiste à utiliser l'application pour enregistrer l'emplacement des dernières données lors de la prochaine requête, vous pouvez lancer la numérisation directement à partir de l'emplacement enregistré, évitant ainsi l'utilisation de OFFSET.
L'utilisation de cette méthode peut la transformer en une requête de plage, et ses performances seront très bonnes quel que soit l'endroit où la page est tournée en arrière.
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!