Announcement

Collapse
No announcement yet.

Verständnisfrage zu SP

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

  • Verständnisfrage zu SP

    Hallo #,

    Ich habe in einer SP einen join verwendet, wo für eines der Join-Felder ein Index fehlt.<br>
    Lege ich den Index jetzt wieder an, wird er dann verwendet ?
    <p>
    Ich glaube mich zu erinnern, dass das nicht so ist ?.<br>
    Was konkret wird gespeichert, der Zugriffspfad zum Zeitpunkt des Erzeugens ?<br>
    Hat die Tabelle z.B. 5 Einträge, entscheidet der Optimierer viell. den table scan zu benutzen,l bei 10000 würde er dann nat. einen Index benutzen .
    <p>
    Danke im voraus
    <p>
    Heiko

  • #2
    Heiko,

    da jede SP vor Ihrer Ausführung "prepared" werden muss, wird auch dabei jedesmal der Plan ermittelt.
    Probier's einfach aus:
    Mach ein Prepare mit irgendeinem Tool und schau Dir den Plan an.
    Lege dann Deinen Index an, TRENNE alle Verbindungen zur DB, mache einen erneuten Connect und schau Dir dann den Plan beim Prepare an.
    (Es sei denn Du hast den Plan in der SP reingeschrieben...)

    Luc

    Comment


    • #3
      Hallo Lucas,<p>
      aber in der SP steht doch der Ausführungsplan im BLR schon drin. Ein SP ist doch schneller als eine prepared Query, die das gleiche zurückliefert.<p>
      Irgendwas wird dort doch schon vorher berechnet.<br>
      So ist es z.B. nicht möglich, eine Tabelle zu löschen, wenn sie in ener SP verwendet wird, bei einer Query geht das schon.
      <p>
      Heik

      Comment


      • #4
        Heiko,
        <br>
        der PLAN steht nicht in der BLR drinnen, außer Du hast explizit einen PLAN angegeben. Der PLAN einer Stored Procedure wird dann ermittelt, wenn die SP das erste mal in den Metadaten-Cache geladen wird. Darum auch Lucas' Hinweis, dass man die Verwendung eines neu angelegten Index erst nach einem Disconnect aller Verbindungen und Reconnect erst dann sehen wird. Eine Möglichkeit ohne Disconnect zu arbeiten, wäre das neu übersetzen der SP im Kontext der einen Verbindung, in der die SP den neu angelegten Index verwenden soll.
        <br>
        Die Sache, dass ein neuangelegten Index von einer SP nicht sofort verwendet wird hat nichts damit zu tun, dass der PLAN in der BLR abgelegt wird. Dem ist nicht so.
        <br>
        Thoma
        Thomas Steinmaurer

        Firebird Foundation Committee Member
        Upscene Productions - Database Tools for Developers
        Mein Blog

        Comment

        Working...
        X