15 Stimmen

Wie kann meine Anwendung von temporären Tabellen profitieren?

Ich habe ein wenig über temporäre Tabellen in MySQL gelesen, aber ich bin ein absoluter Neuling, wenn es um Datenbanken im Allgemeinen und MySQL im Besonderen geht. Ich habe mir einige Beispiele und die MySQL-Dokumentation angesehen, wie man eine temporäre Tabelle erstellt, aber ich versuche herauszufinden, inwiefern temporäre Tabellen für meine Anwendungen von Nutzen sein könnten, und ich schätze, zweitens, auf welche Arten von Problemen ich stoßen kann. Zugegeben, jede Situation ist anders, aber ich denke, was ich suche, ist ein paar allgemeine Ratschläge zu diesem Thema.

Ich habe ein wenig gegoogelt, aber nicht genau das gefunden, was ich zu diesem Thema gesucht habe. Wenn Sie Erfahrungen damit haben, würde ich gerne davon hören.

Danke! Matt

16voto

Daniel Papasian Punkte 15817

Temporäre Tabellen sind oft wertvoll, wenn Sie ein ziemlich kompliziertes SELECT durchführen wollen und dann eine Reihe von Abfragen darauf ausführen...

Sie können etwas tun wie:

CREATE TEMPORARY TABLE myTopCustomers
   SELECT customers.*,count(*) num from customers join purchases using(customerID)
   join items using(itemID) GROUP BY customers.ID HAVING num > 10;

Und dann machen Sie eine Reihe von Abfragen gegen myTopCustomers, ohne die Verknüpfungen zu Käufen und Artikeln in jeder Abfrage zu machen. Wenn Ihre Anwendung das Datenbank-Handle nicht mehr benötigt, müssen keine Bereinigungen vorgenommen werden.

Fast immer werden Sie temporäre Tabellen sehen, die für abgeleitete Tabellen verwendet werden, die teuer zu erstellen waren.

11voto

user11318 Punkte 9115

Zunächst ein Disclaimer - mein Job ist die Berichterstattung, so dass ich mit weitaus komplexeren Abfragen zu tun habe als jeder normale Entwickler. Wenn Sie eine einfache CRUD-Anwendung (Create Read Update Delete) schreiben (das sind die meisten Webanwendungen), dann wollen Sie wirklich keine komplexen Abfragen schreiben, und Sie machen wahrscheinlich etwas falsch, wenn Sie temporäre Tabellen erstellen müssen.

Abgesehen davon verwende ich temporäre Tabellen in Postgres für eine Reihe von Zwecken, und die meisten lassen sich auf MySQL übertragen. Ich verwende sie, um komplexe Abfragen in eine Reihe von einzeln verständlichen Teilen zu zerlegen. Ich verwende sie für die Konsistenz - indem ich einen komplexen Bericht durch eine Reihe von Abfragen generiere und dann einige dieser Abfragen in Module auslagern kann, die ich an mehreren Stellen verwende, kann ich sicherstellen, dass verschiedene Berichte miteinander konsistent sind. (Und ich kann sicherstellen, dass ich, wenn ich etwas korrigieren muss, dies nur einmal tun muss.) Und in seltenen Fällen verwende ich sie absichtlich, um einen bestimmten Abfrageplan zu erzwingen. (Versuchen Sie das nicht, wenn Sie nicht wirklich wissen, was Sie tun!)

Deshalb finde ich temporäre Tabellen großartig. Aber das heißt, es ist sehr Es ist wichtig, dass Sie verstehen, dass es im Allgemeinen zwei Arten von Datenbanken gibt. Die erste ist für die Verarbeitung vieler kleiner Transaktionen optimiert, die andere für die Verarbeitung einer kleineren Anzahl komplexer Berichte. Die beiden Typen müssen unterschiedlich eingestellt werden, und ein komplexer Bericht, der auf einer transaktionalen Datenbank ausgeführt wird, birgt die Gefahr, dass Transaktionen blockiert werden (und somit die Webseiten nicht schnell genug zurückkehren). Daher sollten Sie es nicht vermeiden, eine Datenbank für beide Zwecke zu verwenden.

Ich vermute, dass Sie eine Webanwendung schreiben, die eine transaktionale Datenbank benötigt. In diesem Fall sollten Sie keine temporären Tabellen verwenden. Wenn Sie komplexe Berichte aus Ihren Transaktionsdaten erstellen müssen, empfiehlt es sich, regelmäßig (z. B. täglich) Backups zu erstellen, diese auf einem anderen Rechner wiederherzustellen und dann die Berichte auf diesem Rechner auszuführen.

4voto

AaronS Punkte 7389

Temporäre Tabellen sind am besten geeignet, wenn Sie eine Reihe von Daten aus mehreren Tabellen abrufen, diese bearbeiten und dann zu einer Ergebnismenge zusammenfassen müssen.

In MS SQL sollten temporäre Tabellen auch anstelle von Cursors verwendet werden, wann immer dies möglich ist, da Cursors die Geschwindigkeit und die Ressourcen beeinträchtigen.

3voto

David Robbins Punkte 10000

Wenn Sie neu im Bereich Datenbanken sind, gibt es einige gute Bücher von Joe Kelko, die die besten Praktiken für ANSI SQL beschreiben. SQL für Smarties wird sehr detailliert die Verwendung von temporären Tabellen, die Auswirkungen von Indizes, Where-Klauseln usw. beschreiben. Es ist ein großartiges Nachschlagewerk mit detaillierten Informationen.

1voto

neuroguy123 Punkte 1353

Ich habe sie in der Vergangenheit verwendet, als ich ausgewertete Daten erstellen musste. Das war allerdings vor der Zeit der Views und Sub-Selects in MySQL, und ich verwende sie jetzt im Allgemeinen dort, wo ich eine temporäre Tabelle gebraucht hätte. Das einzige Mal, dass ich sie verwende, ist, wenn die Erstellung der ausgewerteten Daten lange dauert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X