Announcement

Collapse
No announcement yet.

Performance SQL Abfrage

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

  • Performance SQL Abfrage

    Hallo,

    Ich habe folgende SQL Abfrage:

    SELECT FIRMEN.ID,
    FIRMEN.BEZEICHNUNG,
    FIRMEN_1.ID AS ID_EDP,
    FIRMEN_1.BEZEICHNUNG AS EDP,
    FIRMEN_2.ID AS ID_ECP,
    FIRMEN_2.BEZEICHNUNG AS ECP,
    FIRMEN_3.ID AS ID_ECPS,
    FIRMEN_3.BEZEICHNUNG AS ECPS,
    SOFTWAREPFLEGE.D AS SOFTWAREPFLEGE
    FROM FIRMEN
    LEFT OUTER JOIN FIRMEN FIRMEN_1 ON FIRMEN_1.ID = FIRMEN.ID_HIERARCHIE3
    LEFT OUTER JOIN FIRMEN FIRMEN_2 ON FIRMEN_2.ID = FIRMEN.ID_HIERARCHIE2
    LEFT OUTER JOIN FIRMEN FIRMEN_3 ON FIRMEN_3.ID = FIRMEN.ID_HIERARCHIE1
    LEFT OUTER JOIN SOFTWAREPFLEGE ON SOFTWAREPFLEGE.ID = FIRMEN.ID_SOFTWAREPFLEGE
    WHERE FIRMEN.BEZEICHNUNG LIKE '%hansen%'


    Diese Abfrage dauert einige Stunden und Sie wird auf einen View ausgeführt.

    Kann mir einer sagen, warum diese Abfrage solange dauert?

    Gruß Jörg

  • #2
    Hallo Jörg,

    lass Dir mal den Ausführungsplan für das Statement anzeigen.
    Aus dem erfährst Du, an welcher Stelle die meisten Kosten entstehen und wo welche Indizes genutzt werden; oder eben auch nicht genutzt werden (Full Table Scan).

    Dann gibt es noch die Möglichkeit, den "Datenbankmodul-Optimierungsratgeber" (tolle Bezeichnung) auf das Statement anzusetzten, der schlägt dann ggf. weitere Indizes vor (die man aber nicht unbedingt auch alle so einrichten sollte, ohne sie sich genauer anzusehen und sich so seine Gedanken darüber zu machen)

    Und ganz allegemein gesagt, ein LIKE "%irgendwas%" ist immer langsam, da er auch mit Index dann immer eine "Full Index Scan" machen muss, um das gewünscht zu finden.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Die Datenbank ist nur mit Views auf eine andere Datenbank aufgebaut und es ich kann da ja nicht den "Datenbankmodul-Optimierungsratgeber" nutzen :-(

      jörg

      Comment


      • #4
        Das die Basistabellen in einer anderen DB liegen, ist schlecht...damit scheidet eine "indizierte Sicht" schon mal aus.
        Ich vermute mal, das Du nicht der DBA/DBO der anderen DB bis und somit dort keine Änderung vornehmen kannst?

        Den Ausführungsplan kannst Du trotzdem abrufen, der löst auch Views auf anderen DBs u.ä. auf.
        Dadurch bekommst Du zumindest schon mal einen Hinweis.
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Hi Jörg,

          wieviele Datensätze sind denn in der Tabelle Firmen vorhanden?
          Wenn es hier relativ viele sind könnte es daran liegen, dass der SQL Server
          mit Deiner Einschränkung "FIRMEN.BEZEICHNUNG LIKE '%hansen%'" jeden Datensatz anfassen muss, sprich einen Table Scan durchführen muss, da er keinen Index verwenden kann.

          Da aber offensichtlich keine Struktur der DB bekannt ist, würde ich mal die SELECT-Abfrage vereinfachen und dann Tabelle für Tabelle hinzufügen.

          D.h. fang' doch mal an mit
          Code:
          SELECT FIRMEN.ID,
          FIRMEN.BEZEICHNUNG,
          FROM FIRMEN
          WHERE FIRMEN.BEZEICHNUNG LIKE '%hansen%'
          und schau' Dir das Verhalten an. Anschließend die nächste Tabelle joinen, Verhalten anschauen usw.


          HTH,
          Karsten

          Comment

          Working...
          X