Announcement

Collapse
No announcement yet.

Schnelle Bestimmung der Anzahl von Datensätzen in Tabelle

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

  • Schnelle Bestimmung der Anzahl von Datensätzen in Tabelle

    In einem einfachen Ansatz ist es möglich die Anzahl der Datensätze einer Tabelle mittels:

    SELECT Count(*) FROM <TabellenName>

    zu bekommen.<br>
    Jedoch dauert diese Bestimmung bei sehr großen Datenbanken u.U. auch länger. Gibt es für die Datenbanken MySQL, MS-SQL und Oracle eine optimierte Möglichkeit über Systemtabellen (normale User-Rechte) diee Anzahl schneller zu bekommen?

  • #2
    Hallo Bernhard,<br><br>für MS SQL müsste das so aussehen:<br><br>SELECT rows FROM dbo.sysindexes WHERE (id IN (SELECT id FROM dbo.sysobjects WHERE (name = 'Table1'))).<br><br>Wobei 'Table1' für jede Tabelle steht. Bei Oracle und MySQL kann ich leider nicht helfen.<br><br>MFG<br>André Mosinsk

    Comment


    • #3
      Danke André,

      habs noch etwas optimiert:<br><br>
      SELECT Max(idx.rows) FROM dbo.sysindexes as idx inner join dbo.sysobjects as obj on idx.id = obj.id
      WHERE ( obj.name = 'Table1')<br><br>
      Ich denke der Max-Wert ist immer die richtige Eintrag in der sysindexes-Tabell

      Comment


      • #4
        Hallo Bernhard,

        für Oracle gibt es was ähnliches - über dbms_analyze. Die dort gespeicherten Analysen benutzt z.B. auch der Optimizer von Oracle. Der Haken: Die Werte sind immer nur geschätzt, da sie einen Snapshot zum Zeitpunkt der Analyse darstellen. Für einen Exakten Wert kommst du um select count(*) ... nicht umhin, aber für eine Schätzung (Große oder kleine Tabelle) reicht es.

        Gruß Fal
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Hallo Falk,

          wie oft werden die Wert aktualisiert

          Comment


          • #6
            Hallo Falk,

            hast Du auch ein Beispiel wie man diese Analysen verwendet. In den Oracle-Hilfen kann man sich ja verlieren ...

            Comment


            • #7
              Hallo Bernhard,

              habe ich auch noch Mist erzählt ;( Das Package heist natürlich DBMS_STATS! Wie oft die Werte aktualisiert werden hängt davon ab, wie oft die Aktualiserung aufgerufen wird. Oracle erledigt das nicht automatisch. Man könnte aber z.B. einen Job einrichten, der dies Monatlich, wöchentlich, täglich oder wann auch immer erledigt. Mit
              DBMS_STATS.GATHER_TABLE_STATS werden die Statistiken für eine einzelne Tabelle und mit DBMS_STATS.GATHER_SCHEMA_STATS für alle Tabellen eines Nutzerschemas aktualisiert. Je nach Umfang der Tabellen kann dies eine Weile dauern!
              Die Infos kannst du anschließend über DBMS_STATS.GET_TABLE_STATS abrufen, du findest sie aber auch in den Views USER_TABLES und ALL_TABLES.

              Bsp.: für die Tabelle EMPLOYES im Schema SCOTT<pre>
              begin
              DBMS_STATS.GATHER_TABLE_STATS('SCOTT', 'EMPLOYES');
              end;</pre>

              Mit "select NUM_ROWS from USER_TABLES where TABLE_NAME='EMPLOYES'" kannst du die Anzahl der Datensätze dann abrufen.

              Gruß Fal
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Hallo Falk,

                wenn diese Statistik nur aktualisiert wird, wenn man sie auch anstößt, so ist es für meinen Falls nicht geeignet, da teilweise absolut aktuelle Infos nötig sind.

                Aber trotzdem Danke für die Hilfe.

                Aber wenn Du dich so gut mit Oracle auskennst, so weißt Du vieleicht auch eine (einfach verständliche) Info zu meine Frage <a href="http://www.entwickler-forum.de/webx?50@@.4a872b21">Replikation erkennen bei Oracle</a&gt

                Comment


                • #9
                  Hallo Bernhard,
                  den Thread zur Replikation habe ich gelesen, da ich aber noch nichts mit Replikationen zu tun hatte, kann ich dir dort leider nicht helfen.
                  Bei einer einfachen Snapshot-Replikation hilft dir aber u.U. die View SYS.ALL_SNAPSHOTS. Wenn dort für einen Snapshot in der Spalte MASTER_LINK etwas eingetragen ist, dann deutet das daruafhin, daß die Daten von einer anderen DB kommen. Aber wie gesagt, für eine 100% Antwort müßte ich mich auch erst belesen.

                  Gruß Fal
                  Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                  Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                  Comment


                  • #10
                    Achtung!!! Die Lösung für MS SQL-Server kann man für die genaue Anzahl in die Tonne treten. Liefert nur Zirka-Werte.

                    http://support.microsoft.com/kb/308126/de
                    http://dbforums.com/showthread.php?t=761787

                    Comment

                    Working...
                    X