Ich bin dabei, die Abfragen in meiner MySQL-Datenbank zu optimieren. Während ich Visual Explain verwende und verschiedene Abfragekosten anschaue, finde ich immer wieder kontra-intuitive Werte. Operationen, die effizientere Nachschlagevorgänge (z. B. Schlüsselsuche) verwenden, scheinen höhere Abfragekosten zu haben als scheinbar weniger effiziente Vorgänge (z. B. vollständige Tabellensuche oder vollständige Indexsuche).Sind Abfragekosten die beste Metrik für die MySQL-Abfrageoptimierung?
Beispiele hierfür können auch im Handbuch MySQL zu sehen sind, in dem Abschnitt in Bezug auf Sicht auf this page Erklären: Die Abfrage Kosten für den vollständigen Tabellenscan ist ein Bruchteil der Schlüssel-Lookup-Abfrage Kosten. Ich sehe genau das gleiche Szenario in meiner eigenen Datenbank.
All dies scheint perfekt rückwärts zu mir, und wirft diese Frage auf: Soll ich Abfragekosten wie die Standard bei der Optimierung einer Abfrage verwenden? Oder habe ich die Abfragekosten grundsätzlich falsch verstanden?
Am Ende des Tages ist in der Regel die "tatsächliche Leistung" am wichtigsten. Geschätzte (und tatsächliche) Abfragepläne sind nett. Auf der anderen Seite ist es in der Regel eine Anforderung, dass die relevanten Abfragen schnell ausgeführt werden. – user2864740
Ich bin mir auch nicht sicher, was die Frage stellt - die Kosten der Basis-FTS sind von selbst bedeutungslos, da sie nur einen Teil der Informationen ausmachen, die zur Beantwortung der Anfrage benötigt werden.(Wenn die Tabelle einen geeigneten Index und eine ausreichende Datenmenge hat, sollte sie sich von einem vollständigen Scan zu einem Index-Scan ändern: Dieser Schritt "erstellt effektiv die anfänglichen N [1000] Zeilen". In diesem Fall hielt der Planer die Tabelle für klein genug oder hatte keinen verwendbaren Index.) – user2864740
Ich verstehe, was jeder Schritt der Abfrage tut und wie es es macht. Was ich nicht verstehe, ist, dass der Abfrageplaner fast ohne Ausnahme denkt, dass indizierte Lesevorgänge teurer sind als nicht indizierte Lesevorgänge, wenn der gesunde Menschenverstand das Gegenteil behaupten würde. Zum Beispiel habe ich in meiner Datenbank eine Abfrage gefunden, die einen vollständigen Tabellenscan durchführt, also habe ich einen passenden Index hinzugefügt, der Planer hat dann diesen Index ausgewählt, aber EXPLAIN zeigte, dass die Abfragekosten ** nach dieser Änderung ** nach oben gegangen sind. –