Terminar com o SELECT COUNT(*) FROM schema_name.table_name

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

Deixar uma Resposta

Tem de ter a sessão iniciada para publicar um comentário.