php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 12-10-2007, 23:15
naitsab
 Newbie
Links : Onlinestatus : naitsab ist offline
Registriert seit: Oct 2007
Beiträge: 25
naitsab ist zur Zeit noch ein unbeschriebenes Blatt
Standard MySQL - Perfomance Frage - Verknüpfte Tabellen

Abend,

meine Situation ist die Folgende (Es geht um eine Bilder-Galerie):

Ich habe eine MySQL-Tabelle mit 10 Feldern (Name der Galerie, Beschreibungs-Text, etc..)

Pro Galerie sollen 8 Bilder vorhanden sein.
Dabei stellt sich mir folgende Frage und mir geht es dabei nur um die MySQL-Auslastung, da später sehr viele Galerien und Aufrufe vorhanden sein werden.

Sollte ich eine extra Tabelle erstellen, in der ich jedes Bild einzeln eintrage und mit der Galerie-ID verknüpfe? (ID, ID_Galerie, BILDURL).

ODER

sollte ich die Bilder mit Semikolon getrennt in ein Feld in die Galerie-Tabelle dazustecken.
Das Feld würde dann inhaltlich so aussehen: bild1.jpg;bild2.jpg;bild3.jpg;etc...

Programmierungstechnisch ist für mich beides kein Problem, habe auch schon beide Varianten ausprobiert, mir geht es wie gesagt nur um die MySQL-Server-Auslastung bei dem ganzen. Mir ist es schnurz egal, ob ich jetzt in der 3. Normalform bin oder nicht. Übersichtlichkeit ist auch egal.

Ich sehe bei der Semikolon-Variante den Vorteil, dass ich mir ja immer ein Query spare, weil ich mir ja nicht mehr mit der Galerie-ID das jeweilige Bild raussuchen muss.
Allerdings werden bei der Semikolon-Variante auch immer alle Bilder aus der Datenbank ausgelesen und das Datenvolumen ist größer.

Also geht Query-Anzahl gegen Datenvolumen, sehe ich das richtig oder habe ich da einen Denkfehler.

Was meint ihr dazu?

Wäre schön, wenn ich mal verschiedene Meinungen von Fachmännern dazu höre, weil ich selber erst ein fortgeschrittener Anfänger bin.

*edit*: Habe noch vergessen zu erwähnen, dass es später mal weit über 10.000 Bilder sein werden. Das könnte ja für ne Beurteilung von Relevanz sein.

Geändert von naitsab (12-10-2007 um 23:21 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 12-10-2007, 23:58
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Halte deine Tabelle entsprechend den Normalformen.
Wenn das später an der Performance suckt, dann kannst du wieder kommen.
Mit Zitat antworten
  #3 (permalink)  
Alt 13-10-2007, 11:41
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Schon alleine weil du so viele Bilder hast, würde ich sie einzeln abspeichern. Die Normalformen sind ja nicht ohne Sinn eingeführt worden. Wie ghostgambler schon sagt, wenn du mit der Normalform feststellst, dass dir Performance fehlt, kann man über Optimierungen nachdenken! Meist ist es aber eh so, das ein zweiter Server günstiger wäre als ein Umbau des Quellcodes
Mit Zitat antworten
  #4 (permalink)  
Alt 13-10-2007, 11:57
naitsab
 Newbie
Links : Onlinestatus : naitsab ist offline
Registriert seit: Oct 2007
Beiträge: 25
naitsab ist zur Zeit noch ein unbeschriebenes Blatt
Standard

wenn ich später bei 10.000 Bildern Perfomance Einbüßungen habe, kann ich ja wohl schlecht auf das andere System umsteigen.
Bis das alles umgeschrieben ist, vergehen ja Jahre.

Deswegen wollte ich das ja vorher abgeklärt haben.
Es heißt ja immer, man soll die Normalformen verwenden, aber Gründe habt ihr mir auch keine genannt
Mit Zitat antworten
  #5 (permalink)  
Alt 13-10-2007, 12:28
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Was hat die Anzahl der Bilder mit dem Umschreiben des PHP-Codes zutun?
Was machst du, wenn du das System später erweitern willst, dafür die Einhaltung einer Normalform brauchst, die Daten aber nur denormalisiert vorhanden sind? Es ist unlustig Gigabyte große Tabellen zu normalisieren...
Mit Zitat antworten
  #6 (permalink)  
Alt 13-10-2007, 12:35
naitsab
 Newbie
Links : Onlinestatus : naitsab ist offline
Registriert seit: Oct 2007
Beiträge: 25
naitsab ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich hab ja nicht vom Umschreiben des PHP-Codes gesprochen, sondern eben genau von der Umwandlung der Datenbank-Tabelle.
Aber halt in die andere Richtung, von Normal zu Einer Tabelle.
Mit Zitat antworten
  #7 (permalink)  
Alt 13-10-2007, 12:53
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Es ist deutlich einfacher einen zusätzlichen Cache zu bauen, als aus einem Cache die originalen Daten zu erhalten.
Mit Zitat antworten
  #8 (permalink)  
Alt 13-10-2007, 13:18
naitsab
 Newbie
Links : Onlinestatus : naitsab ist offline
Registriert seit: Oct 2007
Beiträge: 25
naitsab ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ok, überzeugt, ich mach's jetzt mit der 3. Normalform.
Ihr habt schon recht, später werd ichs gebrauchen können.

Aber dazu wollte ich immer schon was fragen. Was ist denn der Unterschied zwischen:

SELECT
t1.zahl, t2.quadrat
FROM
tabelle1 t1
INNER JOIN tabelle2 t2 USING(tab1_id)

und

SELECT
t1.zahl, t2.quadrat
FROM
tabelle1 t1, tabelle2 t2
WHERE
t1.tab1_id=t2.tab1_id


Datenbankstruktur wie oben im JOINS sticky thread.

Das Ergebnis sollte ja dasselbe sein. Hat die JOINS Variante Perfomance Vorteile?
Mit Zitat antworten
  #9 (permalink)  
Alt 13-10-2007, 13:27
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nein, die sind beide vollständig äquivalent, aber zugunsten der Leserlichkeit bevorzuge ich die Variante mit "INNER JOIN", statt einfach nur eine per Komma separierte Liste...

Und spätestens, wenn man dann mehrere Tabellen über verschiedene JOIN-Arten verknüpfen will, alternativ noch ausgeklügelte ON mit WHERE-Klauseln verbinden will, kommt man um die längere, aber meiner Meinung nach halt deutlichere, Variante, sowieso nicht mehr drumherum.
Mit Zitat antworten
  #10 (permalink)  
Alt 13-10-2007, 13:27
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Hat die JOINS Variante Perfomance Vorteile?
Ja, anfangs nur marginal, wenn du allerdings viele Ergebnisse und große Felder hast lohnt es sich schon - ein Beispiel:
Code:
// Database Querys / Querytypes	(10000x)
//Normal                  | 15 Spalten             | 15 Spalten + 1 Feld mit ~5000 Zeichen
//Zeit: 2.89275288582 sec | Zeit: 4.5441839695 sec | Zeit: 16.4118978977 sec
SELECT * FROM posts p, comments c WHERE p.id = c.post_id AND p.id = 1
//Zeit: 2.82277488708 sec | Zeit: 4.5260310173 sec | Zeit: 16.2775440216 sec
SELECT * FROM posts p JOIN comments c ON p.id = c.post_id WHERE p.id = 1
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #11 (permalink)  
Alt 13-10-2007, 13:29
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Optimiert der Optimizer sowas nicht?...
Mit Zitat antworten
  #12 (permalink)  
Alt 13-10-2007, 14:07
naitsab
 Newbie
Links : Onlinestatus : naitsab ist offline
Registriert seit: Oct 2007
Beiträge: 25
naitsab ist zur Zeit noch ein unbeschriebenes Blatt
Standard

oh, dann werde ich mir mal angewöhnen mit JOIN zu arbeiten.

danke euch beiden.


aber grundsätzlich gilt also, wenn ich das richtig verstanden habe:
alles, was man mit JOIN macht, könnte man auch mit WHERE lösen?
Mit Zitat antworten
  #13 (permalink)  
Alt 13-10-2007, 14:59
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von naitsab
aber grundsätzlich gilt also, wenn ich das richtig verstanden habe:
alles, was man mit JOIN macht, könnte man auch mit WHERE lösen?
Ne, glaube nicht, zumindest wüsste ich spontan nicht, wie man so einen LEFT JOIN nachbauen könnte.
Mit Zitat antworten
  #14 (permalink)  
Alt 13-10-2007, 15:07
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Optimiert der Optimizer sowas nicht?...
Größtenteils schon denk ich - aber die Zeitmessung sagt was anderes. Kommt insgesamt natürlich auch auf Indizes und Datenmengen an.
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:20 Uhr.