|
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