Esta simples instrução ( SELECT COUNT(*) FROM schema_name.table_name) para tabelas de pequena dimensão não tem grande impacto, mas para tabelas grandes é muito prejudicial ao desempenho. Recomendo vivamente que não o utilizem nestas situações, porque para obter o número de linhas é realizado um full table scan à tabela em questão.
Apresento aqui algumas alternativas:
SQL Server BOX
/*******************************************************************************/
SQL Server 2000 e 2005
SP_MSTABLESPACE ‘schema_name.table_name’;
SQL Server 2005
SELECT TOTAL_ROWS = SUM(P_ST.ROW_COUNT)
FROM SYS.DM_DB_PARTITION_STATS P_ST
WHERE OBJECT_NAME(OBJECT_ID) = ‘table_name’
AND (INDEX_ID < 2);
/*******************************************************************************/
Oracle BOX
/*******************************************************************************/
SELECT OWNER,
TABLE_NAME,
NUM_ROWS
FROM DBA_TABLES
WHERE TABLE_NAME = ‘table_name’
AND OWNER = ‘schema_name;
/*******************************************************************************/
Nota:É imprescindível que as tabelas possuam estatísticas actualizadas. Senão não há alternativa ao SELECT COUNT(*) FROM schema_name.table_name ou seus derivados. Ou há SELECT COUNT(1) FROM FROM schema_name.table_name ou seus derivados, escolha um campo que seja índex e not null.
João Paulino