Thursday, April 4, 2013

How many rows are in your tables?

If you need counts on all of your tables (perhaps you are doing some data mining on a new server?), you probably don't want to run a "selcet count (*)" on all the tables -- it's time consuming and resoruce intensive.

Instead, try this:


SELECT sc.name +'.'+ ta.name TableName

 ,SUM(pa.rows) RowCnt

 FROM sys.tables ta

 INNER JOIN sys.partitions pa

 ON pa.OBJECT_ID = ta.OBJECT_ID

 INNER JOIN sys.schemas sc

 ON ta.schema_id = sc.schema_id

 WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)

 GROUP BY sc.name,ta.name

 ORDER BY SUM(pa.rows) DESC

2 comments:

  1. I use this to get row counts:
    SELECT QUOTENAME(SCHEMA_NAME(sOBJ.schema_id)) + '.' + QUOTENAME(sOBJ.name) AS [TableName], SUM(sPTN.Rows) AS [RowCount]
    FROM sys.objects AS sOBJ INNER JOIN sys.partitions AS sPTN
    ON sOBJ.object_id = sPTN.object_id
    WHERE
    sOBJ.type = 'U'
    AND sOBJ.is_ms_shipped = 0x0
    AND index_id < 2 -- 0:Heap, 1:Clustered
    GROUP BY
    sOBJ.schema_id, sOBJ.name
    ORDER BY [TableName]
    GO

    ReplyDelete
  2. Hey, anyhting EXCEPT count (*) =8-}

    Thanks for your suggestion.

    ReplyDelete