Angenommene Optimierungsmethode:
Grenzoptimierung: Nehmen Sie zuerst die dem Paging entsprechende ID heraus, basieren Sie dann auf dem Feldwert
Index
Myisam-Engine
Angehängter Code:
Gesamtzahl der Abfragedaten:
Das Bild unten zeigt die ID, die dem Abfrage-Paging entspricht:
Das Bild unten zeigt das Abfrageergebnis:
---------------Aktualisiert am 06.07.2016 17:47-----------------
Gefällt mir Orte, die es eigentlich nicht brauchen sollten, haben sich bereits damit befasst, und die Dinge, die nicht gebraucht werden sollten, werden nicht mehr gebraucht. Das Codediagramm wurde ebenfalls aktualisiert. Jetzt kann die Reaktion unter 2,5 Sekunden
Der Ausführungsplan lautet wie folgt: Dies ist die erste Anweisung, Die Gesamtmenge der Abfragedaten
<code>SELECT `r`.`id` FROM (`samplerecord` as r) LEFT JOIN `statementsample` as s ON `r`.`sample_id`=`s`.`id` LEFT JOIN `breed` as b ON `s`.`food_id`=`b`.`id` LEFT JOIN `user` as u ON `r`.`user_id`=`u`.`id` WHERE `s`.`code` != ''</code>
Die zweite Anweisung Fragen Sie die erste Feld-ID des Pagings ab
<code>SELECT `r`.`id` as id FROM (`samplerecord` as r) LEFT JOIN `statementsample` as s ON `r`.`sample_id`=`s`.`id` LEFT JOIN `breed` as b ON `s`.`food_id`=`b`.`id` LEFT JOIN `user` as u ON `r`.`user_id`=`u`.`id` WHERE `s`.`code` != '' ORDER BY `id` DESC LIMIT 1 OFFSET 5988</code>
Die dritte Aussage: Datenergebnissatz abfragen
<code>SELECT `r`.`id` as id, `s`.`code` as code, `b`.`breed_name`, `r`.`state`, `u`.`username`, `r`.`recordtime`, `r`.`remark` FROM (`samplerecord` as r) LEFT JOIN `statementsample` as s ON `r`.`sample_id`=`s`.`id` LEFT JOIN `breed` as b ON `s`.`food_id`=`b`.`id` LEFT JOIN `user` as u ON `r`.`user_id`=`u`.`id` WHERE `s`.`code` != '' AND `r`.`id` < '109541' ORDER BY `id` DESC LIMIT 12</code>
Bitte helfen Sie mir bei der Analyse...
Angenommene Optimierungsmethode:
Grenzoptimierung: Nehmen Sie zuerst die dem Paging entsprechende ID heraus, basieren Sie dann auf dem Feldwert
Index
Myisam-Engine
Angehängter Code:
Gesamtzahl der Abfragedaten:
Das Bild unten zeigt die ID, die dem Abfrage-Paging entspricht:
Das Bild unten ist das Abfrageergebnis:
---------------Aktualisiert am 06.07.2016 17:47-----------------
Gefällt mir Orte, die es eigentlich nicht brauchen sollten, haben sich bereits damit befasst, und die Dinge, die nicht gebraucht werden sollten, werden nicht mehr gebraucht. Das Codediagramm wurde ebenfalls aktualisiert. Jetzt kann die Reaktion unter 2,5 Sekunden
Der Ausführungsplan lautet wie folgt: Dies ist die erste Anweisung, Die Gesamtmenge der Abfragedaten
<code>SELECT `r`.`id` FROM (`samplerecord` as r) LEFT JOIN `statementsample` as s ON `r`.`sample_id`=`s`.`id` LEFT JOIN `breed` as b ON `s`.`food_id`=`b`.`id` LEFT JOIN `user` as u ON `r`.`user_id`=`u`.`id` WHERE `s`.`code` != ''</code>
Zweite Anweisung Fragen Sie die erste Feld-ID des Pagings ab
<code>SELECT `r`.`id` as id FROM (`samplerecord` as r) LEFT JOIN `statementsample` as s ON `r`.`sample_id`=`s`.`id` LEFT JOIN `breed` as b ON `s`.`food_id`=`b`.`id` LEFT JOIN `user` as u ON `r`.`user_id`=`u`.`id` WHERE `s`.`code` != '' ORDER BY `id` DESC LIMIT 1 OFFSET 5988</code>
Die dritte Aussage: Datenergebnissatz abfragen
<code>SELECT `r`.`id` as id, `s`.`code` as code, `b`.`breed_name`, `r`.`state`, `u`.`username`, `r`.`recordtime`, `r`.`remark` FROM (`samplerecord` as r) LEFT JOIN `statementsample` as s ON `r`.`sample_id`=`s`.`id` LEFT JOIN `breed` as b ON `s`.`food_id`=`b`.`id` LEFT JOIN `user` as u ON `r`.`user_id`=`u`.`id` WHERE `s`.`code` != '' AND `r`.`id` < '109541' ORDER BY `id` DESC LIMIT 12</code>
Bitte helfen Sie mir bei der Analyse...
Können Sie den SQL- und Ausführungsplan veröffentlichen?
Durch die Ausführung einer Transaktion wird die Effizienz verbessert
1. Teilen Sie die Tabellenverbindungsabfrage zunächst in einfache Abfragen auf
2.
Ein vorläufiger Blick auf 3 SQL:
1. Die Gesamtmenge an SQL, Samplerecord, verwendet keinen Index und der vollständige Tabellenscan wird zwangsläufig langsamer sein
2. Fragen Sie die ID-SQL ab und sortieren Sie die gesamte Tabelle, was voraussichtlich langsam ist
3. Das letzte sollte nicht schlecht sein
Der springende Punkt ist also, einen vollständigen Tabellenscan zu vermeiden. Wenn Sie wirklich die vollständigen Tabellendaten benötigen, ist das Limit nicht zu langsam.
Die letzte Vermutung ist, dass die Bedingung code!='' in hohem Maße filterbar ist, das heißt, es gibt viele solcher Bedingungen, was zu einer langsameren Filterung führt. Versuchen Sie, einen Index hinzuzufügen.