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 KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

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 Der einfachste Weg, die problematische Anwendung oder den problematischen Dienst zu finden, der eine 100-prozentige Festplattenauslastung verursacht, ist die Verwendung des Task-Managers. Um den Task-Manager zu öffnen, klicken Sie mit der rechten Maustaste auf das Startmenü und wählen Sie Task-Manager. Klicken Sie auf die Spaltenüberschrift „Datenträger“, um zu sehen, was die meisten Ressourcen verbraucht. Von dort aus haben Sie eine gute Vorstellung davon, wo Sie beginnen sollen. Das Problem kann jedoch schwerwiegender sein, als nur das Schließen einer Anwendung oder das Deaktivieren eines Dienstes. Lesen Sie weiter, um weitere mögliche Ursachen für Probleme und deren Behebung zu finden. Das Deaktivieren der Superfetch-Superfetch-Funktion (in Windows 11 auch als SysMain bekannt) trägt dazu bei, die Startzeit durch den Zugriff auf Prefetch-Dateien zu verkürzen

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

<h2>So verbergen Sie Dateien und Ordner vor der Suche unter Windows 11</h2><p>Das erste, was wir uns ansehen müssen, ist die Anpassung des Speicherorts der Windows-Suchdateien. Wenn Sie diese spezifischen Speicherorte überspringen, sollten Sie in der Lage sein, Ergebnisse schneller zu sehen und gleichzeitig alle Dateien auszublenden, die Sie schützen möchten. </p><p>Wenn Sie Dateien und Ordner von der Suche unter Windows 11 ausschließen möchten, führen Sie die folgenden Schritte aus: </p><ol&

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

Wenn Ihre Suchleiste in Windows 11 nicht funktioniert, gibt es ein paar schnelle Möglichkeiten, sie im Handumdrehen zum Laufen zu bringen! Bei jedem Microsoft-Betriebssystem kann es von Zeit zu Zeit zu Störungen kommen, und die neuesten Betriebssysteme sind von dieser Regel nicht ausgenommen. Darüber hinaus tritt, wie der Benutzer u/zebra_head1 auf Reddit betonte, der gleiche Fehler unter Windows 11 mit 22H2Build22621.1413 auf. Benutzer haben sich darüber beschwert, dass die Option zum Umschalten des Suchfelds in der Taskleiste zufällig verschwunden ist. Daher müssen Sie auf jede Situation vorbereitet sein. Warum kann ich nichts in die Suchleiste auf meinem Computer eingeben? Die Unfähigkeit, am Computer zu tippen, kann auf unterschiedliche Faktoren und Prozesse zurückgeführt werden. Hier sind einige Dinge, die Sie beachten sollten: Ctfmon.

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

Oracle-Indextypen umfassen: 1. B-Tree-Index; 3. Funktionsindex; Bitmap-Verbindungsindex; 10. Zusammengesetzter Index. Detaillierte Einführung: 1. Der B-Tree-Index ist eine selbstausgleichende Baumdatenstruktur, die gleichzeitige Vorgänge effizient unterstützen kann. In der Oracle-Datenbank ist der B-Tree-Index der am häufigsten verwendete Indextyp zum Bitmap-Algorithmus und so weiter.

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

Führen Sie die Fehlerbehebung für Suche und Indizierung in Outlook aus. Eine der einfacheren Lösungen, die Sie starten können, ist die Ausführung der Fehlerbehebung für Suche und Indizierung. So führen Sie die Fehlerbehebung unter Windows 11 aus: Klicken Sie auf die Schaltfläche „Start“ oder drücken Sie die Windows-Taste und wählen Sie „Einstellungen“ aus dem Menü. Wenn die Einstellungen geöffnet werden, wählen Sie System > Fehlerbehebung > Zusätzliche Fehlerbehebung. Scrollen Sie auf der rechten Seite nach unten, suchen Sie nach „SearchandIndexing“ und klicken Sie auf die Schaltfläche „Ausführen“. Wählen Sie „Outlook-Suche“, um keine Ergebnisse zurückzugeben, und fahren Sie mit den Anweisungen auf dem Bildschirm fort. Wenn Sie es ausführen, erkennt und behebt der Troubleshooter das Problem automatisch. Öffnen Sie nach dem Ausführen der Fehlerbehebung Outlook und prüfen Sie, ob die Suche ordnungsgemäß funktioniert. wie

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

Die Lösungen sind: 1. Überprüfen Sie, ob der Indexwert korrekt ist: Überprüfen Sie zunächst, ob Ihr Indexwert den Längenbereich des Arrays überschreitet. Der Index des Arrays beginnt bei 0, daher sollte der maximale Indexwert die Array-Länge minus 1 sein. Überprüfen Sie die Schleifenrandbedingungen: Wenn Sie Indizes für den Array-Zugriff in einer Schleife verwenden, stellen Sie sicher, dass die Schleifenrandbedingungen korrekt sind; 3. Initialisieren Sie das Array: Stellen Sie vor der Verwendung eines Arrays sicher, dass das Array korrekt initialisiert wurde. 4. Verwenden Sie die Ausnahmebehandlung: Sie können den Ausnahmebehandlungsmechanismus im Programm verwenden, um Fehler abzufangen, bei denen der Index die Grenzen des Arrays überschreitet. und entsprechend damit umgehen.

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

In diesem Artikel wird ausführlich erläutert, wie PHP die Zeichenfolge von der Startposition zur Endposition einer Zeichenfolge in einer anderen Zeichenfolge zurückgibt. Der Herausgeber hält dies für recht praktisch, daher teile ich es Ihnen als Referenz mit diesem Artikel können Sie etwas abgewinnen. Verwenden Sie die Funktion substr() in PHP, um Teilzeichenfolgen aus einer Zeichenfolge zu extrahieren. Die Funktion substr() kann Zeichen innerhalb eines angegebenen Bereichs aus einer Zeichenfolge extrahieren. Die Syntax lautet wie folgt: substr(string,start,length) wobei: string: der ursprüngliche String, aus dem der Teilstring extrahiert werden soll. start: Der Index der Startposition des Teilstrings (beginnend bei 0). Länge (optional): Die Länge des Teilstrings. Wenn nicht angegeben, dann

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? Einführung: PHP und MySQL sind derzeit die am weitesten verbreiteten Programmiersprachen und Datenbankverwaltungssysteme und werden häufig zum Erstellen von Webanwendungen und zum Verarbeiten großer Datenmengen verwendet. Datengruppierung und Datenaggregation sind häufige Vorgänge bei der Verarbeitung großer Datenmengen. Wenn Indizes jedoch nicht ordnungsgemäß entworfen und verwendet werden, können diese Vorgänge sehr ineffizient werden. In diesem Artikel wird erläutert, wie Sie mithilfe von Indizes die Effizienz der Datengruppierung und Datenaggregation in PHP und MySQL verbessern und verbessern

See all articles