Pular para o conteúdo

Count(*) de todas as tabelas

Count(*) de todas as tabelas

Olá, pessoal.

Uma pergunta frequente em fóruns e afins é “como saber a quantidade de linhas em cada tabela de um schema?”.

Basicamente a atividade consiste em algo similar a um select count(*)… em todas as tabelas, e dependendo da quantidade de objetos pode levar um tempo enorme!

Portanto, para que você possa alcançar essas informações, trago hoje uma opção, que é utilizar a coluna NUM_ROWS das tabelas *_tables.

scott@ORCL> set head off
scott@ORCL> select 'Tabela: ' || table_name, 'Linhas:' || num_rows from user_tables;

Tabela: BIG_TABLE                      Linhas:1001563
Tabela: T                              Linhas:2
Tabela: DEPT                           Linhas:4
Tabela: EMP                            Linhas:14
Tabela: ALL_USERS_BKP                  Linhas:29
Tabela: TB_PESSOA                      Linhas:50000
Tabela: RUN_STATS                      Linhas:
Tabela: T1                             Linhas:1002871
Tabela: T2                             Linhas:1008771

9 rows selected.

Para que a opção tenha o valor exato (ou aproximado dependendo da quantidade de movimentos na tabela durante a consulta) você precisa coletar as estatísticas da mesma.

Por exemplo, observe que a tabela RUN_STATS está com a informação vazia, vamos coletar as estatísticas desta tabela e depois rodar novamente a contagem

scott@ORCL> BEGIN dbms_stats.gather_table_stats('SCOTT','RUN_STATS');
2  end;
3  /

PL/SQL procedure successfully completed.

Uma outra opção, caso a base não seja muito grande ou você puder realizar a operação, é aplicar a coleta no schema inteiro.

scott@ORCL> EXEC DBMS_STATS.gather_schema_stats('SCOTT');

PL/SQL procedure successfully completed.

E agora…

scott@ORCL> select 'Tabela: ' || table_name, 'Linhas:' || num_rows from user_tables;

'TABELA:'||TABLE_NAME                  'LINHAS:'||NUM_ROWS
-------------------------------------- -----------------------------------------------
Tabela: BIG_TABLE                      Linhas:1003859
Tabela: T                              Linhas:2
Tabela: DEPT                           Linhas:4
Tabela: EMP                            Linhas:14
Tabela: ALL_USERS_BKP                  Linhas:29
Tabela: TB_PESSOA                      Linhas:50000
Tabela: RUN_STATS                      Linhas:0
Tabela: T1                             Linhas:1002488
Tabela: T2                             Linhas:496014

9 rows selected.

Veja que agora aparece o valor 0 na RUN_STATS (lembre sempre que vazio é diferente de ter algum valor, nesse caso 0) e que os valores de outras tabelas mudaram em relação ao primeiro select.

Lembrando que podemos utilizar filtros nos nomes das tabelas para reduzir o número de resultados, caso necessário.

É isso pessoal, espero ter ajudado no seu dia-a-dia.

Abraços

felipeg

felipeg

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress