Table des matières
1,朋友找我帮忙看下比较慢的sql语句
2,我让他提供了explain分析下执行结果
3,我让他提供下涉及到的几个表的索引情况
4,去掉order by后比较快的思考
5,解决方案:强制使用主键索引
Maison base de données tutoriel mysql mysqlselect中子查询中使用强制索引的优化案例_MySQL

mysqlselect中子查询中使用强制索引的优化案例_MySQL

May 30, 2016 pm 05:10 PM
案例 索引

1,朋友找我帮忙看下比较慢的sql语句

SELECT
    pg.product_goods_id,
    pg.product_id,
    pg.pdt_code,
    pg.pdt_name,
    pg.brand_name,
    pg.reference_price,
    pg.deposit,
    pg.sale_status,
    pg.is_delete,
    pg.create_date,
    pg.create_operator,
    pg.update_date,
    pg.update_operator,
    si.shop_id,
    si.shop_name,
    pg.goods_img_url,
    pg.is_bargain,
    pg.qr_code_url,
    (
        SELECT
            COUNT(*)
        FROM
            product_attention pa
        WHERE
            pa.product_goods_id = pg.product_goods_id
        AND `status` = 0
    ) AS laud,
    pc.category_name,
    pg.is_experience,
    pg.deposit,
    pg.buy_type,
    pg.content,
    pg.assure_flag,
    pg.market_price,
    pg.qty_cnt,
    pg.sales_cnt
FROM
    product_goods pg 
LEFT JOIN shop_info si ON si.shop_id = pg.shop_id
LEFT JOIN product_category pc ON pc.category_id = pg.category_id
WHERE
    si.market_id IN (1, 2, 3, 12, 13) 
 ORDER BY pg.update_date DESC , pg.product_goods_id DESC
LIMIT 0,
 20;
Copier après la connexion

问题1,加上如下的子查询,比较慢

        (
                SELECT
                    COUNT(*)
                FROM
                    product_attention pa
                WHERE 
                    pa.product_goods_id = pg.product_goods_id
                AND `status` = 0
            ) AS laud,
Copier après la connexion

这里加上去就有点慢,有什么优化办法么,询问有啥方法?

原blog地址:http://blog.csdn.net/mchdba/article/details/49667417,未经原作者同意,谢绝转载。

2,我让他提供了explain分析下执行结果

C:\Users\Administrator\Pictures\1105\e1.jpg
这里写图片描述
从中可以看到,pg表中用到了临时表空间也用到了filesort,这个点比较麻烦了。

3,我让他提供下涉及到的几个表的索引情况

、pa.jpg
这里写图片描述
、si.jpg
这里写图片描述
、pg.jpg
这里写图片描述

几个表的数据量都不大,product_goods 6w多条,其他3千多条。不应该这么慢的。

4,去掉order by后比较快的思考

我猜猜可能是order by引起的,我让去掉order by之后,他说比较快,但是这个order by不能轻易去掉,因为这是也许需要。但是order by字段里面有 product_goods_id。

5,解决方案:强制使用主键索引

分析到引起蛮的order by以及子查询里面都有product_goods_id字段,而且这个字段是pg表的主键,这么可以强制使用主键索引而不走shop_id的索引,我让他采用product_goods pg force index(PRI) 强制使用主键索引,我这样想,主要是因为这个语句的子查询用的是主键关联,但是explain的时候用的是shop_id的索引,我就怀疑是走了这个shop_id的索引导致的。如果不走这个shop_id字段的索引,直接走主键id既然兼顾到了join表链接又兼顾到了子查询了。

结果,他测试了后,发现快了许多,问题解决,expain结果如下ok.jpg所示,已经没有using temporary这一项了。
这里写图片描述

 

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment réparer l'utilisation du disque à 100 % sous Windows 11 Comment réparer l'utilisation du disque à 100 % sous Windows 11 Apr 20, 2023 pm 12:58 PM

Comment réparer l'utilisation du disque à 100 % sous Windows 11 Le moyen le plus simple de trouver l'application ou le service problématique provoquant une utilisation du disque à 100 % consiste à utiliser le Gestionnaire des tâches. Pour ouvrir le Gestionnaire des tâches, cliquez avec le bouton droit sur le menu Démarrer et sélectionnez Gestionnaire des tâches. Cliquez sur l'en-tête de colonne Disque pour voir ce qui utilise le plus de ressources. À partir de là, vous aurez une bonne idée de par où commencer. Cependant, le problème peut être plus grave que la simple fermeture d'une application ou la désactivation d'un service. Poursuivez votre lecture pour découvrir d'autres causes potentielles de problèmes et comment les résoudre. La désactivation de la fonctionnalité SuperfetchSuperfetch (également connue sous le nom de SysMain dans Windows 11) permet de réduire le temps de démarrage en accédant aux fichiers de prélecture

Comment masquer des fichiers et des dossiers et les supprimer de la recherche dans Windows 11 ? Comment masquer des fichiers et des dossiers et les supprimer de la recherche dans Windows 11 ? Apr 26, 2023 pm 11:07 PM

<h2>Comment masquer des fichiers et des dossiers de la recherche sous Windows 11</h2><p>La première chose que nous devons examiner est de personnaliser l'emplacement des fichiers de recherche Windows. En ignorant ces emplacements spécifiques, vous devriez pouvoir voir les résultats plus rapidement tout en masquant tous les fichiers que vous souhaitez protéger. </p><p>Si vous souhaitez exclure des fichiers et des dossiers des recherches sous Windows 11, procédez comme suit : </p><ol&

Voici 6 façons de réparer la barre de recherche de Windows 11 non disponible. Voici 6 façons de réparer la barre de recherche de Windows 11 non disponible. May 08, 2023 pm 10:25 PM

Si votre barre de recherche ne fonctionne pas sous Windows 11, il existe quelques moyens rapides de la rendre opérationnelle en un rien de temps ! Tout système d'exploitation Microsoft peut rencontrer des problèmes de temps en temps, et les derniers systèmes d'exploitation ne sont pas exemptés de cette règle. De plus, comme l'a souligné l'utilisateur u/zebra_head1 sur Reddit, la même erreur apparaît sur Windows 11 avec 22H2Build22621.1413. Les utilisateurs se sont plaints de la disparition aléatoire de l'option permettant de basculer le champ de recherche de la barre des tâches. Par conséquent, vous devez être prêt à affronter n’importe quelle situation. Pourquoi ne puis-je pas taper dans la barre de recherche de mon ordinateur ? L’incapacité de taper sur l’ordinateur peut être attribuée à différents facteurs et processus. Voici quelques éléments dont vous devez être conscient : Ctfmon.

Quels sont les types d'index Oracle ? Quels sont les types d'index Oracle ? Nov 16, 2023 am 09:59 AM

Les types d'index Oracle incluent : 1. Index B-Tree ; 2. Index Bitmap ; 3. Index de fonction ; 5. Index de clé inversée ; Index de connexion bitmap ; 10. Index composite. Introduction détaillée : 1. L'index B-Tree est une structure de données arborescente auto-équilibrée qui peut prendre en charge efficacement les opérations simultanées. Dans la base de données Oracle, l'index B-Tree est le type d'index le plus couramment utilisé. 2. L'index Bit Graph est basé sur un type d'index ; sur l'algorithme bitmap et ainsi de suite.

La recherche Outlook de Windows 11 ne fonctionne pas : 6 correctifs La recherche Outlook de Windows 11 ne fonctionne pas : 6 correctifs Apr 22, 2023 pm 09:46 PM

Exécutez l'utilitaire de résolution des problèmes de recherche et d'indexation dans Outlook L'un des correctifs les plus simples que vous pouvez démarrer consiste à exécuter l'utilitaire de résolution des problèmes de recherche et d'indexation. Pour exécuter l'utilitaire de résolution des problèmes sous Windows 11 : cliquez sur le bouton Démarrer ou appuyez sur la touche Windows et sélectionnez Paramètres dans le menu. Lorsque les paramètres s'ouvrent, sélectionnez Système > Dépannage > Dépannage supplémentaire. Faites défiler vers le bas sur le côté droit, recherchez SearchandIndexing et cliquez sur le bouton Exécuter. Sélectionnez Recherche Outlook pour ne renvoyer aucun résultat et continuez avec les instructions à l'écran. Lorsque vous l'exécuterez, l'utilitaire de résolution des problèmes identifiera et résoudra automatiquement le problème. Après avoir exécuté l'utilitaire de résolution des problèmes, ouvrez Outlook et voyez si la recherche fonctionne correctement. comme

Comment résoudre le problème selon lequel l'index dépasse la limite du tableau Comment résoudre le problème selon lequel l'index dépasse la limite du tableau Nov 15, 2023 pm 05:22 PM

Les solutions sont les suivantes : 1. Vérifiez si la valeur d'index est correcte : confirmez d'abord si votre valeur d'index dépasse la plage de longueur du tableau. L'index du tableau commence à 0, donc la valeur maximale de l'index doit être la longueur du tableau moins 1 ; Vérifiez les conditions aux limites de la boucle : si vous utilisez des index pour accéder au tableau dans une boucle, assurez-vous que les conditions aux limites de la boucle sont correctes ; 3. Initialisez le tableau : avant d'utiliser un tableau, assurez-vous que le tableau a été correctement initialisé ; 4. Utilisez la gestion des exceptions : vous pouvez utiliser le mécanisme de gestion des exceptions dans le programme pour détecter les erreurs lorsque l'index dépasse les limites du tableau. et gérez-le en conséquence.

Comment améliorer l'efficacité du regroupement et de l'agrégation de données en PHP et MySQL via des index ? Comment améliorer l'efficacité du regroupement et de l'agrégation de données en PHP et MySQL via des index ? Oct 15, 2023 am 11:39 AM

Comment améliorer l'efficacité du regroupement et de l'agrégation de données en PHP et MySQL via des index ? Introduction : PHP et MySQL sont actuellement les langages de programmation et les systèmes de gestion de bases de données les plus utilisés, et sont souvent utilisés pour créer des applications Web et traiter de grandes quantités de données. Le regroupement et l'agrégation de données sont des opérations courantes lors du traitement de grandes quantités de données, mais si les index ne sont pas conçus et utilisés de manière appropriée, ces opérations peuvent devenir très inefficaces. Cet article présentera comment utiliser les index pour améliorer l'efficacité du regroupement et de l'agrégation de données dans PHP et MySQL, et améliorer

PHP renvoie la chaîne de la position de début à la position de fin d'une chaîne dans une autre chaîne PHP renvoie la chaîne de la position de début à la position de fin d'une chaîne dans une autre chaîne Mar 21, 2024 am 10:31 AM

Cet article expliquera en détail comment PHP renvoie la chaîne de la position de début à la position de fin d'une chaîne dans une autre chaîne. L'éditeur pense que c'est assez pratique, je le partage donc avec vous comme référence, j'espère que vous finirez de lire. cet article. Vous pouvez tirer quelque chose de cet article. Utilisez la fonction substr() en PHP pour extraire des sous-chaînes d'une chaîne. La fonction substr() peut extraire des caractères dans une plage spécifiée d'une chaîne. La syntaxe est la suivante : substr(string,start,length) où : string : la chaîne d'origine à partir de laquelle la sous-chaîne doit être extraite. start : L'index de la position de départ de la sous-chaîne (à partir de 0). length (facultatif) : la longueur de la sous-chaîne. Si non précisé, alors

See all articles