Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

View Geschwindigkeit

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von ukulele, 18 April 2012.

  1. ukulele

    ukulele Datenbank-Guru

    Ich lese schon ne weile diverse Artikel aber habe wenig hilfreiches bisher gefunden. Ich möchte meine View schneller machen und dazu am liebsten einen Index auf die View klatschen, nur scheinbar geht das nicht da sie GROUP BY und count(*) verwendet. Eigentlich möchte ich das Ergebniss irgendwie Puffern, aber ich kenne keine derartige Möglichkeit.

    Die Notlösung wäre es, alles nochmal umzubauen und Tabellen mit Triggern zu befüllen. Trotzdem habe ich schon viel Zeit in die View variante Investiert. :(
     
  2. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Hey ukulele,

    ich weiß nicht ob MSSQL so etwas unterstützt, aber in Oracle gäbe es diesbezüglich (wenn es im VIEW-Code kein Optimierungspotential mehr gibt) sogenannte Materialized - Views. Diese können inkrementell zeitgesteuert oder mittels Trigger refreshed werden.

    Kannst du eventuell den Viewcode posten?

    PS: wie kann ich Code hier im Forum besser darstellen?

    LG
     
  3. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Hey ich hab noch etwas bezüglich Indexed VIEWs gefunden.

    Hier ein Beispiel von der MS-Seite:

    CREATE VIEW Vdiscount1 WITH SCHEMABINDING AS
    SELECT SUM(UnitPrice*OrderQty) AS SumPrice,
    SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS SumDiscountPrice,
    COUNT_BIG(*) AS Count, ProductID
    FROM Sales.SalesOrderDetail
    GROUP BY ProductID
    GO
    CREATE UNIQUE CLUSTERED INDEX VDiscountInd ON Vdiscount1 (ProductID)
    Lg
     
  4. ukulele

    ukulele Datenbank-Guru

    Keine Ahnung wo sein Problem liegt.
     
  5. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

  6. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

  7. ukulele

    ukulele Datenbank-Guru

    Systemobjekte nicht, mein Tabellennamen ist allerdings ein weiterer SELECT mit Alias, daran wird es wohl liegen. Wobei ich den Sinn dieser Einschränkung überhaupt nicht verstehe, aber ich glaube allein aus Perfomance Gründen werde ich eine Temporäre Tabelle aufbauen und die berechneten Sachen da rein schreiben und nicht weiter auf diesem View Ding beharren. Ein Aufruf der Sicht dauert mitlerweile 1:14
     
  8. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Den Sinn der Einschränkung kann ich auch nicht verstehen!!!
    Eine temporäre Tabelle wäre hier vl. wirklich sehr sinnvoll. Bei Oracle kann das Table-Logging mit "ALTER Table Tablename NOLOGGING" deaktiviert werden, weiß jedoch nicht, ob dies bei MSSQL auch möglich ist. Dann würden zumindest (bei großen Datenmengen) keine Logfiles unnötigerweise erzeugt werden.

    Lg
     
  9. ukulele

    ukulele Datenbank-Guru

    Ich habe das Problem jetzt umgangen in dem ich mit mehreren Tabellen arbeite die von einem Trigger befüllt werden, funktioniert um einiges schneller, auch wenn die größte mit 3 GB und 17 Mio Einträgen zu buche schlägt.
     
  10. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Freut mich zu hören, dass du eine für dich relativ akzeptable Lösung gefunden hast!
    Sofern der Speicherplatz hier nicht ein Problem darstellt!
    Aber besser, als hättest du weiterhin eine VIEW verwendet und um die Performance der VIEW zu verbessern (Annahme: View-Code ist bestens optimiert) die Hardware aufrüsten zu müssen! ;-)

    Lg
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden