Ich habe einen relativ teuren Prozess, der eine "Self Join" erfordert, die meine Rechenzeit verstopft. Betrachten Sie das folgende Skript:MySQL effiziente Tabelle Verdoppelung
CREATE TEMPORARY TABLE tempdb.table1
SELECT * FROM db.sometable WHERE {condition};
ALTER TABLE tempdb.table1 ADD INDEX idx_t({columns for join});
CREATE TEMPORARY TABLE tempdb.table2
SELECT * FROM tempdb.table1;
ALTER TABLE tempdb.table2 ADD INDEX idx_t({columns for join});
In diesem Fall habe ich nötig bin der Index zweimal zu berechnen, bevor ich die Verbindung kann versuchen. Wenn ich die zweite Tabelle mit dem Operator 'LIKE' erstelle, wird die neue Tabelle mit der Indexstruktur erstellt, sie muss jedoch noch verarbeitet werden, während die Tabelle gefüllt wird.
Gibt es eine Möglichkeit, die Tabelle, Indizes und alles in einem Schritt vollständig zu duplizieren? Es würde die Berechnungszeit erheblich einschränken, da es nur Speicher für diese neue Tabelle finden müsste, anstatt viel Rechenleistung zu replizieren. Wie in den Kommentaren erwähnt, ist dies ein Problem, auf das ich regelmäßig für verschiedene Anwendungen stoße. Mein Ziel bei dieser Frage ist nicht die Optimierung einer bestimmten Anwendung, sondern Informationen zu diesem Thema im Allgemeinen.
Es ist möglich, dass Sie die ursprüngliche Abfrage ohne temporäre Tabellen optimieren können. Sie sollten eine andere Frage stellen und die Abfrage einschließen, die Sie optimieren möchten. –
@GordonLinoff Dies ist ein Problem, auf das ich oft stoße, unabhängig vom genauen Kontext. Daher interessiert mich diese Frage mehr als einige allgemeine Optimierungsansätze. – jameselmore
@jameselmore. . . Interessant. Ich muss fast nie temporäre Tabellen erstellen, um Abfragen zu optimieren. –