Announcement

Collapse
No announcement yet.

Index aus Foreign-Keys Script?!

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

  • Index aus Foreign-Keys Script?!

    Hallo,

    hat jemand zufällig ein Script, wo man aus Foreignkeys automatisch Indizies erzeugen kann?

    Wäre toll, wenn nicht werde ich nächste Woche eins selbst schreiben

    Gruß
    Thomas

  • #2
    Hallo,

    es gibt einen Grund, warum der MS SQL Server für einen Fremdschlüssel keinen automatischen Index anlegt. Denn hier stellen sich in jedem konkreten Fall die folgenden Fragen:
    1. Rechtfertigt die Selektivität (Kardinalität) einen Index?
    2. Einen CLUSTERED INDEX oder NONCLUSTERED INDEX verwenden?
    3. Einen Covering Index verwenden?


    Die Antworten auf diese Fragen gehören zum Datenbank-Design. Wenn man es etwas bequemer haben möchte, beantwortet der Database Engine Tuning Advisor des MS SQL Server diese Frage basierend auf dem aktuellen Workload der Datenbank.

    Comment


    • #3
      Bist du dir sicher das du da Indizes brauchst?

      Du wirst ja wohl meistens mit der Tabelle joinen aus der der Fremdschlüssel stammt. Dort ist der Schlüssel der Primary Key und hat damit bereits einen Index (ich gehe von einem normalen Design aus). Bei einem join zieht aber maximal ein Index und es sollte eigentlich immer der Primary Key Index der günstigere (weil selektiver) sein.
      Der Index über deinen Foreign Keys würde also nie ziehen.

      Gruß
      Ralf

      Comment


      • #4
        Hi, naja sagen wir ich brauche es, da ich sonst ca. 1000 Indizies per Hand erstellen müsste! Ich brauch die mehr, als das ich sie nicht brauche! Da lösche ich nachträglich lieber ein paar... Und ohne es böse zu meinen: Ich wollte nicht darüber diskutieren, ich wollte nur ein Script, wenn ihr eins habt Ich weiss schon, was ich tue Trotzdem danke für die Mühe...

        Gruß Thomas

        Comment


        • #5
          Hallo,

          Ich brauch die mehr, als das ich sie nicht brauche!
          ist das eine Vermutung oder bereits eine nachgewiesene Tatsache? Wenn der SQL Server 2005 genutzt wird, kann die Vermutung durch eine Abfrage verifiziert werden:

          Code:
          SELECT * FROM sys.dm_db_missing_index_details 
          WHERE database_id = db_id('Datenbankname')

          Comment


          • #6
            Hallo Herr Kosch,

            ich habe diese Abfrage mal gegen meine Entwicklungsdatenbank unter SQLExpress laufen lassen und keinen einzigen Record zurückbekommen. Ich denke mal, das wäre eigentlich ein gutes Zeichen - oder wird das bei SQLExpress nicht unterstützt oder muss man vorher noch etwas anderes durchführen ... Ich kann es nämlich nicht ganz glauben, dass meine DB (etwa 90 Tabellen und viele Verknüpfungen) wirklich so gut aufgebaut ist, oder vielleicht doch ?

            liebe Grüße,
            Helmut

            Comment


            • #7
              Die Daten werden bei jedem Restart der Datenbank gelöscht.
              Ich vermute einfach mal du hast seit dem letzten Reboot einfach noch nicht
              mit deiner Entwicklungsdatenbank gearbeitet.

              Comment


              • #8
                Hallo,

                so viel Diskussion und immer noch kein Script Naja... ich werde es demnächst wohl selbst posten...

                @Herr Kosch: Ich arbeite leider leider noch auf dem 2000er Server... Wird sich aber bald ändern

                Gruß
                Thomas

                Comment


                • #9
                  Originally posted by Ralf Jansen View Post
                  Die Daten werden bei jedem Restart der Datenbank gelöscht.
                  Ich vermute einfach mal du hast seit dem letzten Reboot einfach noch nicht
                  mit deiner Entwicklungsdatenbank gearbeitet.
                  ... danke, genau so war's. Nun habe ich einige Infos, jetzt muss ich nur noch herausfinden, was ich damit anfangen kann

                  ciao,
                  Helmut

                  Comment

                  Working...
                  X