PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Tabellen als Zwischenspeicher (http://www.selfphp.de/forum/showthread.php?t=21120)

Alea 10.03.2009 19:55:07

Tabellen als Zwischenspeicher
 
Hallo,

mir geht es hier nicht um die Lösung eines Problems, sondern um die vorteilhafte Nutzung der internen MySql-Programmstruktur, von der ich leider keine Ahnung habe.

Ich verwende häufig Tabellen als Zwischenspeicher für die Ergebnisse von SELECT-Anweisungen (auch wenn Tabellen-Joins vielleicht hier und da eleganter sind).

Temporäre Tabellen verwende ich nicht, da ich die Zwischenergebnisse gelegentlich auch für Kontrollzwecke benötige.
Für die Erstellung der Zwischentabellen (mit gleichbleibenden Spaltenköpfen) gibt es nun zwei Möglichkeiten:

[a]
DROP TABLE IF EXISTS tabelle;
CREATE TABLE tabelle SELECT ...;

[b]
TRUNCATE TABLE tabelle;
INSERT INTO tabelle SELECT ...;

Bei [b] wird die vorhandene Tabelle ständig geschrumpft und erweitert. Ich kann mir denken, dass dabei "Speicherlöcher" entstehen. Trotzdem verwende ich bisher problemlos diese Methode, weil dann die Spalten schon die von mir gewünschten Datentypen haben. (Das ließe sich aber auch bei [a] durch vorgeschaltete CREATE TABLE Anweisungen erreichen.)

Ich überarbeite gerade meine Datenbank, deshalb die Frage:
Welche Methode ist aus Sicht der internen MySQL-Daten- und -Programmstruktur die optimalere, oder ist das vollkommen egal?

cortex 10.03.2009 22:46:15

AW: Tabellen als Zwischenspeicher
 
möchte den datenbank-profies hier nicht vorweg greifen, aber: effizient sind ganz sicher beide methoden nicht.

Zitat:

Zitat von Alea (Beitrag 125771)
auch wenn Tabellen-Joins vielleicht hier und da eleganter sind

ich würde das nicht unter dem aspekt der eleganz oder als nice-to-have betrachten. joins sind ein werkzeug wie jedes andere und sollten entsprechend benutzt werden.

Zitat:

Zitat von Alea (Beitrag 125771)
Temporäre Tabellen verwende ich nicht, da ich die Zwischenergebnisse gelegentlich auch für Kontrollzwecke benötige.

solange der sql-server nicht abrauscht, bleiben temporäre tabellen da, wo sie sind. für die laufzeit eines skriptes sollte das ausreichen.

Zitat:

Zitat von Alea (Beitrag 125771)
Ich kann mir denken, dass dabei "Speicherlöcher" entstehen.

die tabelle wird fragmentieren und die performance bei entsprechender tabellengrösse abnehmen.

Zitat:

Zitat von Alea (Beitrag 125771)
Welche Methode ist aus Sicht der internen MySQL-Daten- und -Programmstruktur die optimalere oder ist das vollkommen egal?

keine von beiden - so gesehen ist es dann doch wieder egal .-

cx

Alea 11.03.2009 11:43:02

AW: Tabellen als Zwischenspeicher
 
Hallo cortex,

besten Dank für die Antwort. Ich habe mir schon gedacht, dass es in diese Richtung hinausläuft. Dann muss ich mich wohl doch mit komplexeren Joins und der Lebensdauer temporärer Tabellen genauer befassen, auch wenn sich dabei Frustration wohl nicht vermeiden läst.

cortex 11.03.2009 12:16:17

AW: Tabellen als Zwischenspeicher
 
hallo alea,

so schlimm sind joins nicht... guter grundlagen-artikel: http://aktuell.de.selfhtml.org/artik...oins/index.htm

fortgeschrittene techniken: http://aktuell.de.selfhtml.org/artik...tm#einfuehrung

und wenn's gar nicht mehr weitergeht... (hier) nachfragen .-

cx


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:57:22 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.