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 Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 17-02-2010, 20:26
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard MySQL - Views

Hallo alle zusammen,

Ich bin derzeit dabei mich mal in das Thema Views einzulesen und so langsam geht mir auch ein Licht auf... jedoch habe ich ein paar kurze grundlegende Fragen zur Arbeit mit Views und wie das Ganze im Hintergrund so abläuft.

zur Frage 1: Wird ein einmal erstellter View auf dem Server im Speicher gehalten oder wird dieser auch bei jeder Aktualisierung erneut aufgebaut? ( jedes mal neu würde für mich keinen Sinn ergeben aber ich frage dennoch )

zur Frage 2: Wie funktioniert das allgemein im Hintergrund mit diesen Views?
Werden diese von der DB automatisch immer wieder aktualisiert, sobald sich an den Basistabellen etwas ändert oder muss man das anstoßen?

und somit auch gleich zu Frage 3: Wenn ich in einem View ein UPDATE durchführe.... wird dementsprechend auch die Haupttabelle irgendwie mit aktualisiert?

Ich will erstmal noch ein paar Grundlagen verstehen, bevor ich hier unnütz viele Fragen stelle, die ich mir evtl. danach auch selbst beantworten kann.

Dank euch aber für Antworten...

Gruß Mario
Mit Zitat antworten
  #2 (permalink)  
Alt 17-02-2010, 20:52
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

ein View in MySQL kannst du dir als eine Art gespeicherte Abfrage vorstellen. Das dürfte schon einige Fragen klären: Sie sind immer so aktuell wie die dahinterliegende(n) Tabelle(n) und Updates (auch Inserts oder Deletes) funktionieren sowieso nicht mit Views (es sei denn, es basiert nur auf einer einzigen Tabelle, dann wird diese direkt modifiziert).

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (17-02-2010 um 20:55 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 17-02-2010, 22:43
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard Views

Hi AmicaNoctis,

Hey.... super Antwort, danke. Dann legt die DB diese "fertige" Anfrage also irgendwo ab bzw. hält diese im Speicher oder so ähnlich oder?
Was macht es denn so viel schneller Daten aus einem View zu lesen oder der echten Tabelle?

Daher meine Frage ob Filesystem oder Speicher...

Gruß Mario...
Mit Zitat antworten
  #4 (permalink)  
Alt 17-02-2010, 22:46
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Aus einem View wird imho normalerweise nicht schneller gelesen als aus einer Tabelle, es sei denn, das View besitzt eine Where-Klausel, die nur einen Bruchteil der Datensätze selektiert, dann ist es natürlich schneller als eine Abfrage auf der Basistabelle ohne Where-Klausel.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 17-02-2010, 23:04
goth
  Moderator
Links : Onlinestatus : goth ist offline
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.271
goth ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Insbesondere in der Implementierung der MySQL bringen Views ziemlich wenig ... insbesondere vom Gesichtspunkt der Performance. Gerade Views die keine WHERE Bedingung enthalten und deren Ergebnis in der eigentlichen Abfrage eingegrenzt werden sollen zeichnen sich durch eine extrem verschnarchte Performance aus.

Leider beherrscht MySQL noch keine "materialized views" wie sie richtige RDBMS Systeme implementieren.
__________________
carpe noctem

Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht!
Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung!
Mit Zitat antworten
  #6 (permalink)  
Alt 17-02-2010, 23:12
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard Views

Hm... das klingt als würde es mir nur bedingt Geschwindigkeitsvorteile bringen, wenn ich dich (goth) richtig verstehe. Also macht ein View in MySQL eigentlich nur wirklich Sinn, wenn dessen SELECT durch eine WHERE Klausel aus der org. Tabelle auch wieder nur einen Teil der Daten holt, damit der wiederum spätere Zugriff auf die Daten im View auch Geschwindigkeitsvorteile durch einfach weniger Datensätze bringt, die durchlaufen werden müssen.

Sehe ich das richtig?

Gruß Mario
Mit Zitat antworten
  #7 (permalink)  
Alt 17-02-2010, 23:19
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Ein View macht auch dann Sinn, wenn man dem Client nicht alle Daten zeigen will.
Der Client bekommt dann das Recht, den View zu benutzen, aber nicht das Recht direkt mit der Tabelle zu arbeiten.
Darf er bestimmte Spalten nicht sehen, werden die im SELECT des Views weg gelassen.
Darf er bestimmte Zeilen nicht sehen, werden die durch das WHERE des Views ausgeblendet.
Beides kann natürlich auch kombiniert werden.
Mit Zitat antworten
  #8 (permalink)  
Alt 17-02-2010, 23:24
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard Views

Ich denke, ich werde mich mal an ein paar praktischen Übungen und Tests versuchen. Werde schon einen sinnvollen Weg finden, solche Views verwenden zu können. Ist auch und gerade eine philosophische Sache. Muss erst einmal etwas verinnerlichen denke ich...

Aber Ihr habt mir schon super geholfen. Danke nochmal...

Eine letzte Frage noch: "materialized views" - was ist der grobe Unterschied?
Jetzt hast mich neugierig gemacht

Gruß Mario
Mit Zitat antworten
  #9 (permalink)  
Alt 17-02-2010, 23:29
goth
  Moderator
Links : Onlinestatus : goth ist offline
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.271
goth ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@GELight: Wie es onemorenerd erwähnt hat gibt es verschiedene Gründe einen View zu verwenden ... die Performance ist auf jeden Fall keiner. Da könnte man schon eher darüber nachdenken mit Hilfe von Triggern sowas wie Snapshots zu "emulieren" ... also eine Tabelle erstellen, deren Daten bei jeder Änderung in den Grundtabellen via ON UPDATE, ON INSERT bzw. ON DELETE Trigger angepasst werden.

Alles in allem hat zumindest meine Erfahrung mit MySQL, ORACLE, SQL-Server und INFORMIX gezeigt, das die MySQL Views der allergrößte Murks sind (zumindest in Hinblick auf die Performance) alleine schon aus dem Grunde, das allem Anschein nach die Indizes der Zugrundliegenden Tabellen zumindest nicht hinreichend (wenn überhaupt) genutzt werden ... EXPLAIN lasst sowas zumindest vermuten ...
__________________
carpe noctem

Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht!
Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung!
Mit Zitat antworten
  #10 (permalink)  
Alt 17-02-2010, 23:30
goth
  Moderator
Links : Onlinestatus : goth ist offline
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.271
goth ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Thema Materialized Views:

Sicht (Datenbank) ? Wikipedia

Dort ganz unten.
__________________
carpe noctem

Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht!
Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung!
Mit Zitat antworten
  #11 (permalink)  
Alt 17-02-2010, 23:42
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Als "materialized view" bezeichnet man einen View, den das DBMS sozusagen im Voraus berechnet. Dazu wird eine versteckte Tabelle benutzt, deren Inhalt bei jeder Änderung der dem View zugrunde liegenden Tabelle neu bestimmt wird.
Benutzt man den View, wird der nicht als Query auf der zugrunde liegenden Tabelle ausgeführt sondern nur die zusätzlichen Einschränkungen auf die versteckte Tabelle angewendet und so das Resultset erzeugt.

Klingt kompliziert, ist aber ganz einfach. Mal ein Beispiel ...

die Tabelle: table(id, foo, bar) { (1, 'a', 'b'), (2, 'x', NULL), (3, 'y', NULL) }
der View: "CREATE VIEW myView AS SELECT id, foo FROM table WHERE bar IS NULL";

Der View wird beim Anlegen materialisiert, d.h. es wird eine weitere Tabelle angelegt
_myView(id, foo) { (2, 'x'), (3, 'y') }

Nach jeder Änderung an table wird myView ausgeführt um _myView aktuell zu halten.

Stellt man nun eine Anfrage "SELECT foo FROM myView WHERE id = 2", wird das Ergebnis aus _myView erzeugt. Das geht schneller* als bei nicht-materialisierten Views, weil _myView weniger* Daten enthält als table.


*) Das trifft immer zu, denn der View enthält immer weniger Daten (Spalten und/oder Zeilen) als die Originaltabelle. Sollte das mal nicht so sein, weil der View gegenüber der Originaltabelle überhaupt keine Einschränkungen enthält, merkt das ein gutes DBMS und materialisert diesen View nicht.

Geändert von onemorenerd (17-02-2010 um 23:48 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 17-02-2010, 23:59
goth
  Moderator
Links : Onlinestatus : goth ist offline
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.271
goth ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das Problem der MySQL ist aber wie gesagt eher, dass die Indizes der Grundtabellen nicht verwendet werden (können) wenn das Ergebnis einer Abfrage eingegrenzt werden soll ...
__________________
carpe noctem

Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht!
Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung!
Mit Zitat antworten
  #13 (permalink)  
Alt 18-02-2010, 02:20
medium22
 Registrierter Benutzer
Links : Onlinestatus : medium22 ist offline
Registriert seit: Mar 2006
Beiträge: 308
medium22 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Mal ganz am Rande bemerkt.. Ein (für mich) sehr interessantes Thema weil ich mich auch schon mit Views versucht habe, aber meist den Sinn darin nicht sah. Aber so wie ihr das hier erklärt, geht mir doch glatt ein Lichtlein auf wie man die (auch in MySQL) viel effektiver nutzen könnte - jedenfalls effektiver als bisher von mir angenommen.

Danke dafür!
Mit Zitat antworten
  #14 (permalink)  
Alt 18-02-2010, 14:37
goth
  Moderator
Links : Onlinestatus : goth ist offline
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.271
goth ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von medium22 Beitrag anzeigen
Mal ganz am Rande bemerkt.. Ein (für mich) sehr interessantes Thema weil ich mich auch schon mit Views versucht habe, aber meist den Sinn darin nicht sah. Aber so wie ihr das hier erklärt, geht mir doch glatt ein Lichtlein auf wie man die (auch in MySQL) viel effektiver nutzen könnte - jedenfalls effektiver als bisher von mir angenommen.

Danke dafür!
Schön ... und läßt Du uns alle schöpfen aus dem Füllhorn deiner Weisheit ... ?!
__________________
carpe noctem

Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht!
Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung!
Mit Zitat antworten
  #15 (permalink)  
Alt 19-02-2010, 01:59
medium22
 Registrierter Benutzer
Links : Onlinestatus : medium22 ist offline
Registriert seit: Mar 2006
Beiträge: 308
medium22 zeigte ein beschämendes Verhalten in der Vergangenheit
Standard

Das waren und sind bisher rein theoretische Gedankengäng, also nichts was ich zeigen/beschreiben könnte - zumal das Projekt für welches das ggf. geeignet werde nur in der Theorie besteht.. Könnte also nicht mal zwischen normalem Query und View-Query vergleichen..
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
VIEWs messwell SQL / Datenbanken 1 09-02-2007 14:32
MySQL 5 - Probleme bei Zugriff via MyODBC auf Views White-Horse SQL / Datenbanken 0 05-09-2006 10:57
Views Gnat Apps und PHP Script Gesuche 5 02-06-2004 22:50
Views in Access bei wechsel auf MySQL Stephan666 SQL / Datenbanken 4 02-03-2004 15:45
Programm zum erstellen von Views in MySQL? Keules SQL / Datenbanken 3 01-04-2003 17:22

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 11:41 Uhr.