+39 339 8585151
info@easytarg.com
skip to the main content area of this page
I Ferri del Mestiere
 

Contare i Record


Contare i Record

Un'informazione che spesso risulta necessaria, è il numero di record contenuti in una tabella.

A prima vista la soluzione è ovvia: usare la funzione di aggregazione COUNT(), ma se i record da contare sono tanti, o se fosse necessario contare i record di molte tabelle, l'operazione potrebbe rivelarsi lunga e pesante. Nel caso ci serva il numero TOTALE dei record (senza alcun filtro) c'è un'alternativa.

Soluzione Classica

SELECT COUNT(*) As RecCount
  FROM [Nome della Tabella]

Questo statement funziona bene su tabelle di piccole dimensioni, ma con milioni di record può diventare decisamente lenta.


Soluzione Veloce

SELECT rows As RecCount
  FROM sysindexes
 WHERE indid <= 1
   AND id = OBJECT_ID('[Nome della Tabella]')

Questa soluzione sfrutta il fatto che nella tabella di sistema degli indici, per ogni indice, viene mantenuto anche il numero di record della tabella.
Se la tabella ha una chiave primaria, bisogna leggere il campo rows dell'indice con indid = 1. Se invece la tabella non ha chiave primaria (brutta cosa), il conteggio si trova con indid = 0.

Conteggio Globale

SELECT T.name As TabName, SI.rows As RecCount
  FROM sysindexes SI With(NoLOCK)
            join sys.tables T With(NoLOCK)
                On SI.id = T.object_id And SI.indid <= 1
 WHERE T.name LIKE N'%'
 ORDER BY RecCount DESC

Questo statement consente di ricavare il numero di record per tutte le tabelle del DB.
E' possibile personalizzare la clausola di Where in modo da operare su un insieme ridotto di tabelle, invece che su tutte.
A titolo di esempio il risultato viene ordinato in base al numero di record dal maggiore al minore.




Tutte le Utility