![]() |
Datenbank: PostgreSQL • Version: 8.4.1 • Zugriff über: PHP / pgAdmin direkt
Geschwindigkeit von Views verbessern
Hiho!
Ich habe eine Datenbank welche unter anderem folgende Tabellen ethält: o Mandantenstamm o Zugriffsteuerung (Benutzer -> Mandant) o Datentabelle ... Nun habe ich eine View für die Datentabelle erstellt, welche nur noch die Daten anzeigt, welche mich (also "current_user") auch betreffen (passend zu der Tabelle Zugriffssteuerung) und das Ganze funktioniert an sich auch einwandfrei. Das Problem dabei ist aber, dass die Datentabelle div. Millionen Datensätze beinhaltet. Dadurch dauert das Öffnen der View bestimmt 1 Minute, was natürlich absolut untauglich ist. Sinngemäßes SELECT Kommando, welches hinter der View liegt:
SQL-Code:
...
SELECT d.* FROM datentabelle d, zugrifftabelle z WHERE d.mandant = z.mandant
Wie gesagt: logisch ist das vollkommen richtig so. Nur von der Geschwindigkeit her absolut inakzeptablel. Hat einer von Euch ne Idee, wie man so eine Lösung schneller regeln kann, als über so eine WHERE-Abfrage? Danke im Voraus Patrick |
Re: Geschwindigkeit von Views verbessern
Hast Du die Spalte Mandant in der Datentabelle indiziert? Wenn nicht, mach's mal.
Uli |
Re: Geschwindigkeit von Views verbessern
Indizes vorhanden?
Hat der Server genügend Speicher zur verfügung das diese Indizes auch komplett im Speicher gehalten werden können? |
Re: Geschwindigkeit von Views verbessern
Indizes sind 2 Stück vorhanden.
1x auf die Mandanten-Spalte alleine und 1x noch etwas genauer (mit Zeitraum und Co.) ... Das mit dem Speicher ist aber nen guter Tipp, da hat mich auch ein Kollege gerade drauf gebracht! Weil das ist eine neu aufgesetzte Datenbank und da hab ich noch nix an den Einstellungen von Postgres selbst gedreht. Vielleicht bringt das was, wenn ich da mal die Speicherbereiche vergößer. Ich probier es mal aus. |
Re: Geschwindigkeit von Views verbessern
Hi,
ich tippe eher auf das Statement. Die Indexe werden ja scheinbar nicht benutzt. Möglicherweise hilft ja schon eine Umstellung von dem where auf ein left join. Frank |
Re: Geschwindigkeit von Views verbessern
Brauchst du zudem alle Felder?
|
Re: Geschwindigkeit von Views verbessern
Wenn ich die Abfrage via pgAdmin analysieren lasse scheint er den Index in der Tat nicht zu nutzen.
Das macht er nur, wenn ich die Mandantennummer direkt eintrage. Sobald ich diese aber aus der anderen Tabelle mit einbeziehe scheint er den zu übergehen. Hm... Ich probier mal rum, wie ich das umgehen kann. ... Felder brauche ich übrigens alle, denn diese View weiß nicht wofür sie gebraucht wird. Die ist nur dafür da, dass ich selbst als DB-Benutzer nur das sehen kann, was mich auch zu interessieren hat, völlig unabhängig davon, welches Programm es nacher wie nutzen wird. Ich möchte so gesehen die Sicherheitslogik / Datentrennung schon auf Datenbankebene haben und nicht erst auf Applikationsebene. |
Re: Geschwindigkeit von Views verbessern
Ach ja, nochwas: Mio. Datensätze? Schon mal ausgerechnet wieviel MB hier über Netz geschaufelt werden müssen (Clientseitiger Curse vorrausgesetzt) oder wieviel Speicher der Server für den serverseitigen Curser reservieren muss?
|
Re: Geschwindigkeit von Views verbessern
Zitat:
Die kompletten Daten werden also niemals gebraucht. Das geht hierbei wirklich um eine reine Datensicherheits / -Berechtigungsgeschichte. Wir wollen nicht, dass es ÜBERHAUPT irgendeinem Datenbankbenutzer möglich ist SELECT Abfragen direkt auf die Tabellen zu starten. Dies soll immer nur über Views geschehen, die per se nur das anzeigen, was den Benutzer zu interessieren hat. Abfragen auf die Tabellen selbst darf nur der Admin und der ist so eingestellt, dass sich dieser nur von Managementsystemen verbinden darf und nicht von den eigentlichen Produktivsystemen. (Später auch noch nicht mal mehr vom Localhost). ... Von daher muss ich das Grundprinzip schon so lassen und da führt auch (meines Wissens nach) kein Weg dran vorbei. Bei allen anderen Datentabellen funzt das auch einwandfrei, auch vom Tempo her. Aber die haben auch nur ein paar Hundert bis evt. Zehntausend Datenzeilen und nicht wie diese eine div. Millionen. |
Re: Geschwindigkeit von Views verbessern
Benötigst du wirklich alle Rechte aller Benutzer?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz