Announcement

Collapse
No announcement yet.

Select auf View dauert sehr lange!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Select auf View dauert sehr lange!

    Hallo,

    ich habe ein kleines feines Tool in vb geschrieben was in einem Grid Daten aus einem MS Sql Server auslist.
    Funktionieren tut das ja wunderbar, doch leider dauert der Spass bis zu 4 Sekunden
    Hier die View:
    SELECT TOP 100 PERCENT dbo.viewmitman.MANDANT, dbo.viewmitman.NAME, dbo.viewmitman.VORNAME, MAX(dbo.viewcoaching.datum)
    AS [Letztes Coaching], COUNT_BIG (dbo.viewcoaching.datum) AS Anzahl
    FROM dbo.viewcoaching RIGHT OUTER JOIN
    dbo.viewmitman ON dbo.viewcoaching.MANDANT = dbo.viewmitman.MANDANT AND dbo.viewcoaching.VORNAME = dbo.viewmitman.VORNAME AND
    dbo.viewcoaching.NAME = dbo.viewmitman.NAME
    GROUP BY dbo.viewmitman.MANDANT, dbo.viewmitman.NAME, dbo.viewmitman.VORNAME, dbo.viewmitman.MANDANT
    ORDER BY dbo.viewmitman.NAME

    Durch die zwei Berechnungen der Anzahl und des Letzten Coachings dauert es sooooooe extrem lange!

    Ich habe die View mit Hilfe des Enterprise Managers erstellt.
    Gibt es irgendwie noch eine Möglichkeit genauso an diese Daten zu kommen, und wo es nicht so lange dauert?

    Ich wäre für eure Hilfe sehr dankbar! Gruss!

  • #2
    Hallo,
    bei dem gezeigten Beispiel gibt es gleich mehrere Probleme:

    a) OUTER JOIN
    b) Primärschlüssel aus 3 Zeichenspalten (sehr CPU-intensive JOIN-Verknüpfung)
    c) GROUP BY

    Eine Alternative könnte so aussehen:
    <code>
    <b>CREATE</b> <b>TABLE</b> <b>Test</b>
    (
    recid <b>INT</b> <b>NOT</b> <b>NULL</b> <b>IDENTITY</b> <b>PRIMARY</b> <b>KEY</b>,
    datum DATETIME <b>NOT</b> <b>NULL</b> <b>DEFAULT</b> <b>CURRENT_TIMESTAMP</b>,
    vname NVARCHAR(9) <b>NOT</b> <b>NULL</b> <b>DEFAULT</b> <font color="#9933CC">'Test'</font>,
    nname NVARCHAR(9) <b>NOT</b> <b>NULL</b> <b>DEFAULT</b> <font color="#9933CC">'Test'</font>
    )
    <b>GO</b>
    -- 2000 Testdatensätze einfügen
    <b>DECLARE</b> @i <b>INT</b>
    <b>DECLARE</b> @s NVARCHAR(9)
    <b>SET</b> @i = 0
    <b>WHILE</b> @i &lt; 2000
    <b>BEGIN</b>
    <b>SET</b> @s = <font color="#9933CC">'Test '</font> + <b>CAST</b>(@i <b>AS</b> <b>VARCHAR</b>)
    <b>INSERT</b> <b>INTO</b> <b>Test</b> (vname,nname) <b>VALUES</b> (@s,@s)
    <b>SET</b> @i = @i + 1
    <b>END</b>
    <b>GO</b>
    -- Abfragen
    <b>SELECT</b>
    t.vname,t.nname,
    (<b>SELECT</b> <b>MAX</b>(datum) <b>AS</b> MaxDatum <b>FROM</b> dbo.<b>test</b>) <b>AS</b> MaxDatum,
    (<b>SELECT</b> COUNT_BIG(recid) <b>FROM</b> dbo.<b>test</b>) <b>AS</b> CntRecid
    <b>FROM</b> dbo.<b>Test</b> t
    <b>GO</b>
    </code>
    Wenn die Tabellenstruktur nicht geändert werden soll (kann), verbessert in der Regel nur ein INDEX auf die betroffenen Spalten das Laufzeitverhalten einer SELECT-Abfrage. Der Microsoft SQL Server stellt als Unterstützung den <i>Index-Optimierungs-Assistenten</i> zur Verfügung, der eine Abfrage untersucht und Vorschläge macht

    Comment

    Working...
    X