Announcement

Collapse
No announcement yet.

Alle Tabellen anzeigen und Dätensätze zählen

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

  • Alle Tabellen anzeigen und Dätensätze zählen

    Hallo zusammen,

    mit welchem SQL befehl kann ich mir alle Tabellen anzeigen lassen, die nach der Anzahl der vorhandenen Datensätze sortiert sind?

    zB.

    TAb1: 1588882 DAtensätze
    Tab2: 1322265
    Tab3: 1233354

    ... usw.

    VG

  • #2
    http://en.wikipedia.org/wiki/Oracle_metadata
    Christian

    Comment


    • #3
      Originally posted by Donsk View Post
      Hallo zusammen,

      mit welchem SQL befehl kann ich mir alle Tabellen anzeigen lassen, die nach der Anzahl der vorhandenen Datensätze sortiert sind?

      zB.

      TAb1: 1588882 DAtensätze
      Tab2: 1322265
      Tab3: 1233354

      ... usw.

      VG
      Das dürfte nicht unerheblich vom verwendeten DB-System abhängen. Bei PostgreSQL würde ich pg_class befragen, Spalte reltuples.


      Andreas

      Comment


      • #4
        Originally posted by akretschmer View Post
        Das dürfte nicht unerheblich vom verwendeten DB-System abhängen. Bei PostgreSQL würde ich pg_class befragen, Spalte reltuples.


        Andreas
        DB-System wäre MS SQL

        Comment


        • #5
          Originally posted by Donsk View Post
          DB-System wäre MS SQL
          Dann ist das richtige Stichwort information_schema. Jürgen
          Zuletzt editiert von Jürgen Thomas; 18.01.2013, 17:35. Reason: Fehlinterpretation meinerseits; sorry, Christian!

          Comment


          • #6
            Ich hatte den Thread erst hierhin verschoben....
            Christian

            Comment


            • #7
              Schaue dir mal sp_MSForEachTable an ...

              bye,
              Helmut

              Comment


              • #8
                Schaue dir mal sp_MSForEachTable an ...
                Doch nicht dafür, einfacher mit der DMV sys.dm_db_partition_stats
                [HIGHLIGHT="SQL"]SELECT SCH.name AS SchemaName
                , OBJ.name AS TableName
                , MAX (STAT.row_count) AS [RowCount]
                FROM sys.dm_db_partition_stats AS STAT
                JOIN sys.objects AS OBJ ON STAT.object_id = OBJ.object_id
                JOIN sys.schemas AS SCH ON OBJ.schema_id = SCH.Schema_ID
                GROUP BY SCH.Name
                , OBJ.name[/HIGHLIGHT]

                Comment


                • #9
                  Naja, sooo viel schlimmer ist es mit sp_MSForeachtable auch nicht :-)
                  Klar, ein "einfaches" select ohne globaler temporären Tabelle ist sicher performanter (und multiusersicher), aber ich schreib's mal einfach so her, vielleicht kann ja der eine oder andere was davon brauchen:

                  exec sp_MSforeachtable
                  @command1 = 'insert into ##rowcount select ''?'', count(*) from ?',
                  @precommand = 'create table ##rowcount (tablename varchar(128), rowcnt int)',
                  @postcommand = 'select tablename, rowcnt from ##rowcount order by 2; drop table ##rowcount'
                  bye,
                  Helmut

                  Comment


                  • #10
                    Man muss sich aber bewusst sein das die Abfrage der Anzahl der Datensätze über die Metadaten oft nur Näherungswerte liefern.
                    Liegt aber auch in der Natur der Sache von transaktonsfähigen Multiuserdatenbanken begründet das solche Informationen nicht 100% genau bestimmt werden können.

                    Die wirkliche Anzahl bekommt man nur über eine
                    Code:
                    select count(*) from <tablename>
                    Abfrage

                    Comment


                    • #11
                      Danke für die vielen Antworten!

                      Viele Grüße

                      Comment


                      • #12
                        Originally posted by hwoess View Post
                        Naja, sooo viel schlimmer ist es mit sp_MSForeachtable auch nicht :-)
                        Wird viel schlimmer, wenn die Tabellen nur groß genug sind, da COUNT (*) einen Clustered Index Scan macht, zu deutsch die Tabelle einmal durchfrässt

                        Getestet mit Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) auf Lenovo Ultrabook
                        [HIGHLIGHT="SQL"]
                        SET STATISTICS IO ON
                        SELECT Row_Count
                        FROM sys.dm_db_partition_stats AS Stats
                        WHERE Object_ID = OBJECT_ID ('dbo.nums')

                        SELECT COUNT(*) AS Row_Count
                        FROM Dbo.Nums
                        SET STATISTICS IO OFF[/HIGHLIGHT]
                        Die Abfrage mit "Sys.dm_db_partition_stats" hat immer eine Laufzeit um die 10 ms und folgendes immer 2 logical reads

                        Die Abfrage mit COUNT braucht ab 20 000 000 Zeilen mehr als eine Sekunde und 34733 logical reads
                        bei 150 000 000 Zeilen 18 Sec und logical reads 261365
                        bei 450 000 000 Zeilen 568 Sec 786909 logical reads , 489 physical reads 489, 775557 read-ahead reads

                        Comment

                        Working...
                        X