mysqlselect中子查询中使用强制索引的优化案例_MySQL
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;
问题1,加上如下的子查询,比较慢
( SELECT COUNT(*) FROM product_attention pa WHERE pa.product_goods_id = pg.product_goods_id AND `status` = 0 ) AS laud,
这里加上去就有点慢,有什么优化办法么,询问有啥方法?
原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这一项了。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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

<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&

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.

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.

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

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.

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? 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
