Inhaltsverzeichnis
1,朋友找我帮忙看下比较慢的sql语句
2,我让他提供了explain分析下执行结果
3,我让他提供下涉及到的几个表的索引情况
4,去掉order by后比较快的思考
5,解决方案:强制使用主键索引
Heim Datenbank MySQL-Tutorial 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;
Nach dem Login kopieren

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

        (
                SELECT
                    COUNT(*)
                FROM
                    product_attention pa
                WHERE 
                    pa.product_goods_id = pg.product_goods_id
                AND `status` = 0
            ) AS laud,
Nach dem Login kopieren

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

原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这一项了。
这里写图片描述

 

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So beheben Sie eine 100-prozentige Festplattenauslastung unter Windows 11 So beheben Sie eine 100-prozentige Festplattenauslastung unter Windows 11 Apr 20, 2023 pm 12:58 PM

So beheben Sie eine 100-prozentige Festplattenauslastung unter Windows 11

Wie verstecke ich Dateien und Ordner und entferne sie aus der Suche in Windows 11? Wie verstecke ich Dateien und Ordner und entferne sie aus der Suche in Windows 11? Apr 26, 2023 pm 11:07 PM

Wie verstecke ich Dateien und Ordner und entferne sie aus der Suche in Windows 11?

Hier sind 6 Möglichkeiten, das Problem zu beheben, dass die Suchleiste von Windows 11 nicht verfügbar ist. Hier sind 6 Möglichkeiten, das Problem zu beheben, dass die Suchleiste von Windows 11 nicht verfügbar ist. May 08, 2023 pm 10:25 PM

Hier sind 6 Möglichkeiten, das Problem zu beheben, dass die Suchleiste von Windows 11 nicht verfügbar ist.

Was sind die Oracle-Indextypen? Was sind die Oracle-Indextypen? Nov 16, 2023 am 09:59 AM

Was sind die Oracle-Indextypen?

Windows 11 Outlook-Suche funktioniert nicht: 6 Korrekturen Windows 11 Outlook-Suche funktioniert nicht: 6 Korrekturen Apr 22, 2023 pm 09:46 PM

Windows 11 Outlook-Suche funktioniert nicht: 6 Korrekturen

So lösen Sie das Problem, dass der Index das Array-Limit überschreitet So lösen Sie das Problem, dass der Index das Array-Limit überschreitet Nov 15, 2023 pm 05:22 PM

So lösen Sie das Problem, dass der Index das Array-Limit überschreitet

Wie kann die Effizienz der Datengruppierung und Datenaggregation in PHP und MySQL durch Indizes verbessert werden? Wie kann die Effizienz der Datengruppierung und Datenaggregation in PHP und MySQL durch Indizes verbessert werden? Oct 15, 2023 am 11:39 AM

Wie kann die Effizienz der Datengruppierung und Datenaggregation in PHP und MySQL durch Indizes verbessert werden?

PHP gibt den String von der Startposition bis zur Endposition eines Strings in einem anderen String zurück PHP gibt den String von der Startposition bis zur Endposition eines Strings in einem anderen String zurück Mar 21, 2024 am 10:31 AM

PHP gibt den String von der Startposition bis zur Endposition eines Strings in einem anderen String zurück

See all articles