Ao fazer uma consulta SQL de contagem (agregada), o que pode acelerar o tempo de execução nesses 3 sistemas de banco de dados? Tenho certeza de que muitas coisas podem acelerar (hardware para um), mas sou apenas um DBA iniciante, por isso tenho certeza de que vou receber algumas respostas aqui. Migrei cerca de 157 milhões de linhas para um banco de dados do SQL Server, e essa consulta está demorando uma eternidade. Mas no meu banco de dados Netezza de origem, leva segundos.
Por exemplo:
Netezza 6:
SELECT COUNT(*) FROM DATABASENAME..MYTABLE
Oracle 11g:
SELECT COUNT(*) FROM MYTABLE
SQL Server 2012:
SELECT COUNT(*) FROM DATABASENAME.[dbo].[MYTABLE]
sql-server
query-performance
count
netezza
MacGyver
fonte
fonte
Respostas:
O Netezza é um dispositivo projetado para se destacar em varreduras de tabelas grandes; é por isso que você está obtendo resultados tão rápidos nesse sistema.
Para o SQL Server, você pode acelerar bastante a contagem de linhas consultando a DMV sys.dm_db_partition_stats.
Em um ambiente de alta transação, não é garantido que esse DMV seja 100% preciso. Mas, com a sua pergunta, parece que você está apenas fazendo contagens de linhas para verificar cada tabela após a migração, portanto, essa consulta deve funcionar para você.
fonte
Aqui está uma solução do SQL Server que usa
COUNT_BIG
dentro de uma exibição indexada. Isso proporcionará uma contagem consistente de transações, sem a sobrecarga de grandes varreduras de tabela ou índice e sem a necessidade do armazenamento necessário para a última:Isso exigirá uma única varredura inicial (sem fugir disso) e adicionará um pouco de sobrecarga às manipulações incrementais de dados da tabela. Se você estiver realizando grandes operações com muitos dados (em oposição a muitas pequenas operações), acho que a sobrecarga nas alterações deve ser insignificante.
fonte
No Oracle, um índice de árvore binária em uma coluna NOT NULL pode ser usado para responder a COUNT (*). Na maioria dos casos, será mais rápido que uma VERIFICAÇÃO DE TABELA COMPLETA, porque os índices geralmente são menores que sua tabela base.
No entanto, um índice de árvore binária regular ainda será enorme com 157 Mrows. Se sua tabela não for atualizada simultaneamente (ou seja, apenas processo de carregamento em lote), convém usar um índice de bitmap.
O menor índice de bitmap seria algo como isto:
Entradas nulas são levadas em conta por um índice de bitmap. O índice resultante será pequeno (20 a 30 blocos de 8k por milhão de linhas) em comparação com um índice comum da árvore binária ou com a tabela base.
O plano resultante deve mostrar as seguintes operações:
Se sua tabela for atualizada simultaneamente, um índice de bitmap com um valor exclusivo será um ponto de discórdia e não deverá ser usado.
fonte
No Oracle, a consulta simples de contagem é frequentemente executada varrendo um índice em vez de uma tabela inteira. O índice deve ser um índice de bitmap ou definido em uma coluna com restrição NOT NULL. Para consultas mais complexas que exigem verificação completa da tabela, você pode usar a consulta paralela.
Para habilitar a consulta paralela (é necessário o Enterprise Edition), você pode usar a dica do otimizador:
Ou ative a consulta paralela para todas as consultas na tabela:
fonte