Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Endpoint de análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de dados SQL no Microsoft Fabric
Cria estatísticas de otimização de consulta em uma ou mais colunas de uma tabela, um modo de exibição indexado ou uma tabela externa. Para a maioria das consultas, o otimizador de consulta já gera as estatísticas necessárias para um plano de consulta de alta qualidade; Em alguns casos, você precisa criar estatísticas extras ou CREATE STATISTICS modificar o design da consulta para melhorar o desempenho da consulta.
Para saber mais, consulte Estatísticas.
Observação
Para obter mais informações sobre estatísticas no Microsoft Fabric, consulte Estatísticas no Fabric Data Warehouse.
Transact-SQL convenções de sintaxe
Sintaxe
Sintaxe para SQL Server, Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure.
-- Create statistics on an external table
CREATE STATISTICS statistics_name
ON { table_or_indexed_view_name } ( column [ , ...n ] )
[ WITH FULLSCAN ] ;
-- Create statistics on a regular table or indexed view
CREATE STATISTICS statistics_name
ON { table_or_indexed_view_name } ( column [ , ...n ] )
[ WHERE <filter_predicate> ]
[ WITH
[ FULLSCAN
[ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]
| SAMPLE number { PERCENT | ROWS }
[ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]
| <update_stats_stream_option> [ , ...n ]
[ [ , ] NORECOMPUTE ]
[ [ , ] INCREMENTAL = { ON | OFF } ]
[ [ , ] MAXDOP = max_degree_of_parallelism ]
[ [ , ] AUTO_DROP = { ON | OFF } ]
]
] ;
<filter_predicate> ::=
<conjunct> [ AND <conjunct> ]
<conjunct> ::=
<disjunct> | <comparison>
<disjunct> ::=
column_name IN (constant , ...)
<comparison> ::=
column_name <comparison_op> constant
<comparison_op> ::=
IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !<
<update_stats_stream_option> ::=
[ STATS_STREAM = stats_stream ]
[ ROWCOUNT = numeric_constant ]
[ PAGECOUNT = numeric_constant ]
Sintaxe para o Azure Synapse Analytics and Analytics Platform System (PDW).
CREATE STATISTICS statistics_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column_name [ , ...n ] )
[ WHERE <filter_predicate> ]
[ WITH {
FULLSCAN
| SAMPLE number PERCENT
}
]
[ ; ]
<filter_predicate> ::=
<conjunct> [ AND <conjunct> ]
<conjunct> ::=
<disjunct> | <comparison>
<disjunct> ::=
column_name IN (constant , ...)
<comparison> ::=
column_name <comparison_op> constant
<comparison_op> ::=
IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !<
Sintaxe do Microsoft Fabric.
CREATE STATISTICS statistics_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column_name )
[ WITH {
FULLSCAN
| SAMPLE number PERCENT
}
]
[ ; ]
Argumentos
statistics_name
O nome das estatísticas a serem criadas.
table_or_indexed_view_name
O nome da tabela, modo de exibição indexado ou tabela externa na qual criar as estatísticas. Para criar estatísticas em outro banco de dados, especifique um nome de tabela qualificado.
coluna [ ,... n ]
Uma ou mais colunas a incluir nas estatísticas. As colunas devem estar em ordem de prioridade da esquerda para a direita. Apenas a primeira coluna é usada para criar o histograma. Todas as colunas são usadas para estatísticas de correlação entre colunas chamadas densidades.
Você pode especificar qualquer coluna que possa ser especificada como uma coluna de chave de índice com as seguintes exceções:
As colunas xml, texto completo e FILESTREAM não podem ser especificadas.
As colunas computadas podem ser especificadas somente se as configurações e do
ARITHABORTQUOTED_IDENTIFIERbanco de dados foremON.As colunas de tipo definidas pelo usuário CLR podem ser especificadas se o tipo suportar ordenação binária. As colunas computadas definidas como invocações de método de uma coluna de tipo definida pelo usuário podem ser especificadas se os métodos forem marcados como determinísticos.
ONDE <filter_predicate>
Especifica uma expressão para selecionar um subconjunto de linhas a serem incluídas ao criar o objeto statistics. As estatísticas criadas com um predicado de filtro são chamadas de estatísticas filtradas. O predicado de filtro usa uma lógica de comparação simples e não pode fazer referência a uma coluna computada, uma coluna UDT, uma coluna de tipo de dados espaciais ou uma coluna de tipo de dados hierarchyID . Comparações usando NULL literais não são permitidas com os operadores de comparação. Em vez disso, use os operadores IS NULL e IS NOT NULL.
Aqui estão alguns exemplos de predicados de filtro para a tabela Production.BillOfMaterials:
WHERE StartDate > '20000101' AND EndDate <= '20000630'WHERE ComponentID IN (533, 324, 753)WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL
Para obter mais informações sobre predicados de filtro, consulte Criar índices filtrados.
VARREDURA COMPLETA
Aplica-se a: SQL Server 2016 (13.x) SP 1 4, SQL Server 2017 (14.x) 1 e versões posteriores
Calcule estatísticas verificando todas as linhas.
FULLSCAN e SAMPLE 100 PERCENT têm os mesmos resultados.
FULLSCAN não pode ser usado com a SAMPLE opção.
Quando omitido, o SQL Server usa amostragem para criar as estatísticas e determina o tamanho da amostra necessário para criar um plano de consulta de alta qualidade.
No Warehouse no Microsoft Fabric, apenas estatísticas baseadas em coluna FULLSCAN única e coluna única SAMPLEsão suportadas. Quando nenhuma opção é incluída, SAMPLE as estatísticas são criadas.
NÚMERO DA AMOSTRA { PERCENTAGEM | LINHAS }
Especifica a porcentagem aproximada, ou o número de linhas, na tabela ou no modo de exibição indexado para o otimizador de consulta usar ao criar estatísticas. Para PERCENT, o número pode ser de 0 a 100 e para ROWS, o número pode ser de 0 ao número total de linhas. A porcentagem ou o número real de linhas que os exemplos do otimizador de consulta podem não corresponder à porcentagem ou ao número especificado. Por exemplo, o otimizador de consulta verifica todas as linhas em uma página de dados.
SAMPLE é útil para casos especiais em que o plano de consulta, baseado na amostragem padrão, não é o ideal. Na maioria das situações, não é necessário especificar SAMPLE porque o otimizador de consulta já usa amostragem e determina o tamanho da amostra estatisticamente significativo por padrão, conforme necessário para criar planos de consulta de alta qualidade.
SAMPLE não pode ser usado com a FULLSCAN opção.
SAMPLE Quando FULLSCAN ou não são especificados, o otimizador de consulta usa dados de amostra e calcula o tamanho da amostra por padrão.
Recomendamos não especificar 0 PERCENT ou 0 ROWS. Quando 0 PERCENT ou 0 ROWS é especificado, o objeto statistics é criado, mas não contém dados estatísticos.
No Warehouse no Microsoft Fabric, apenas estatísticas baseadas em coluna FULLSCAN única e coluna única SAMPLEsão suportadas. Quando nenhuma opção é incluída, FULLSCAN as estatísticas são criadas.
PERSIST_SAMPLE_PERCENT = { EM | DESLIGADO }
Quando ON, as estatísticas retêm a porcentagem de amostragem de criação para atualizações subsequentes que não especificam explicitamente uma porcentagem de amostragem. Quando OFFo , a porcentagem de amostragem de estatísticas é redefinida para amostragem padrão em atualizações subsequentes que não especificam explicitamente uma porcentagem de amostragem. A predefinição é OFF.
Observação
Se a tabela estiver truncada, todas as estatísticas construídas na pilha truncada ou na árvore B (HoBT) voltarão a usar a porcentagem de amostragem padrão. Da mesma forma, se as estatísticas forem atualizadas em um objeto sem linhas, ele voltará a usar a porcentagem de amostragem padrão, mesmo que PERSIST_SAMPLE_PERCENT tenha sido configurado anteriormente.
STATS_STREAM = stats_stream
Identificado apenas para fins informativos. Não suportado. A compatibilidade futura não é garantida.
NORECOMPUTE
Desative a opção de atualização automática de estatísticas, AUTO_STATISTICS_UPDATE, por statistics_name. Se essa opção for especificada, o otimizador de consulta concluirá todas as atualizações de estatísticas em andamento para statistics_name e desabilitará atualizações futuras.
Para reativar as atualizações de estatísticas, remova as estatísticas com DROP STATISTICS e execute CREATE STATISTICS sem a NORECOMPUTE opção.
Advertência
Se você desabilitar a atualização automática de estatísticas, isso poderá impedir que o Otimizador de Consultas escolha planos de execução ideais para consultas que envolvem a tabela. Você deve usar essa opção com moderação e somente por um administrador de banco de dados qualificado.
Para obter mais informações sobre a AUTO_STATISTICS_UPDATE opção, consulte Opções ALTER DATABASE SET. Para obter mais informações sobre como desativar e reativar atualizações de estatísticas, consulte Estatísticas.
INCREMENTAL = { EM | DESLIGADO }
Aplica-se a: SQL Server 2014 (12.x) e versões posteriores
Quando ON, as estatísticas criadas são por estatísticas de partição. Quando OFF, as estatísticas são combinadas para todas as partições. A predefinição é OFF.
Se as estatísticas por partição não forem suportadas, será gerado um erro. Não há suporte para estatísticas incrementais para os seguintes tipos de estatísticas:
- Estatísticas criadas com índices que não estão alinhados com a tabela base.
- Estatísticas criadas em bases de dados secundárias legíveis Always On.
- Estatísticas criadas em bases de dados só de leitura.
- Estatísticas criadas em índices filtrados.
- Estatísticas criadas em visualizações.
- Estatísticas criadas em tabelas internas.
- Estatísticas criadas com índices espaciais ou índices XML.
MAXDOP = max_degree_of_parallelism
Aplica-se a: SQL Server 2016 (13.x) SP 2, SQL Server 2017 (14.x) 3 e versões posteriores
Substitui a opção de configuração do grau máximo de paralelismo durante a operação estatística. Para obter mais informações, consulte Configuração do servidor : grau máximo de paralelismo. Use MAXDOP para limitar o número de processadores usados em uma execução de plano paralelo. O máximo é de 64 processadores.
max_degree_of_parallelism pode ser:
-
1: Suprime a geração de planos paralelos. -
>1: Restringe o número máximo de processadores usados em uma operação de índice paralelo ao número especificado. -
0(padrão): usa o número real de processadores ou menos com base na carga de trabalho atual do sistema.
update_stats_stream_option
Identificado apenas para fins informativos. Não suportado. A compatibilidade futura não é garantida.
AUTO_DROP = { EM | DESLIGADO }
Aplica-se a: SQL Server 2022 (16.x) e versões posteriores, e Banco de Dados SQL do Azure, Instância Gerenciada SQL do Azure
Antes do SQL Server 2022 (16.x), se as estatísticas forem criadas manualmente por um usuário ou ferramenta de terceiros em um banco de dados de usuário, esses objetos de estatísticas poderão bloquear ou interferir nas alterações de esquema desejadas pelo cliente.
A partir do SQL Server 2022 (16.x), a opção é habilitada AUTO_DROP por padrão em todos os bancos de dados novos e migrados. A AUTO_DROP propriedade permite a criação de objetos de estatísticas em um modo tal que uma alteração de esquema subsequente não seja bloqueada pelo objeto statistic, mas em vez disso, as estatísticas sejam descartadas conforme necessário. Desta forma, as estatísticas criadas manualmente com AUTO_DROP ativado comportam-se como estatísticas criadas automaticamente.
Observação
Tentar definir ou desdefinir a propriedade Auto_Drop em estatísticas criadas automaticamente pode gerar erros. As estatísticas criadas automaticamente sempre usam a queda automática. Alguns backups, quando restaurados, podem ter essa propriedade definida incorretamente até a próxima vez que o objeto statistics for atualizado (manual ou automaticamente). No entanto, as estatísticas criadas automaticamente sempre se comportam como estatísticas de queda automática. Ao restaurar um banco de dados para o SQL Server 2022 (16.x) de uma versão anterior, é recomendável executar sp_updatestats no banco de dados, definindo os metadados adequados para o recurso de estatísticas AUTO_DROP .
Para obter mais informações, consulte AUTO_DROP opção.
Permissões
Requer uma destas permissões:
ALTER TABLE- O usuário é o proprietário da tabela
- Associação à função de banco de dados fixa db_ddladmin
Observações
O SQL Server pode usar tempdb para classificar as linhas de exemplo antes de criar estatísticas.
Estatísticas para quadros externos
Ao criar estatísticas de tabela externas, o SQL Server importa a tabela externa para uma tabela temporária do SQL Server e, em seguida, cria as estatísticas. Para estatísticas de amostras, apenas as linhas amostradas são importadas. Se você tiver uma tabela externa grande, é mais rápido usar a amostragem padrão em vez da opção de verificação completa.
Quando a tabela externa está usando DELIMITEDTEXT, CSV, PARQUETou DELTA como tipos de dados, as tabelas externas oferecem suporte apenas a estatísticas para uma coluna por CREATE STATISTICS comando.
Estatísticas com uma condição filtrada
As estatísticas filtradas podem melhorar o desempenho da consulta para consultas selecionadas a partir de subconjuntos de dados bem definidos. As estatísticas filtradas usam um predicado de filtro na WHERE cláusula para selecionar o subconjunto de dados incluído nas estatísticas.
Quando usar CREATE STATISTICS
Para obter mais informações sobre quando usar CREATE STATISTICSo , consulte Estatísticas.
Dependências de referência para estatísticas filtradas
A exibição de catálogo do sys.sql_expression_dependencies rastreia cada coluna no predicado de estatísticas filtradas como uma dependência de referência. Considere as operações que você executa em colunas de tabela, antes de criar estatísticas filtradas. Não é possível descartar, renomear ou alterar a definição de uma coluna de tabela definida em um predicado de estatísticas filtradas.
Limitações
- A atualização de estatísticas não é suportada em tabelas externas. Para atualizar estatísticas em uma tabela externa, solte e recrie as estatísticas.
- Você pode listar até 64 colunas por objeto de estatística.
- A
MAXDOPopção não é compatível comSTATS_STREAM,ROWCOUNTePAGECOUNTopções. - A opção
MAXDOPé limitada pela configuraçãoMAX_DOPgrupo de carga de trabalho do Administrador de Recursos, se usada. -
CREATEeDROP STATISTICSem tabelas externas não têm suporte no Banco de Dados SQL do Azure.
Exemplos
Os exemplos de código neste artigo usam a base de dados de exemplo AdventureWorks2025 ou AdventureWorksDW2025, que você pode baixar da página inicial dos Microsoft SQL Server Samples and Community Projects.
Um. Use CREATE STATISTICS com SAMPLE number PERCENT
O exemplo seguinte cria as ContactMail1 estatísticas, usando uma amostra aleatória de 5 por cento das BusinessEntityID colunas e EmailPromotion da Person tabela da base de dados AdventureWorks2025.
CREATE STATISTICS ContactMail1
ON Person.Person(BusinessEntityID, EmailPromotion)
WITH SAMPLE 5 PERCENT;
B. Use CREATE STATISTICS com FULLSCAN e NORECOMPUTE
O exemplo a seguir cria as NamePurchase estatísticas para todas as linhas nas BusinessEntityID colunas e EmailPromotion da tabela e desabilita a Person recomputação automática de estatísticas.
CREATE STATISTICS NamePurchase
ON AdventureWorks2022.Person.Person(BusinessEntityID, EmailPromotion)
WITH FULLSCAN, NORECOMPUTE;
C. Use CREATE STATISTICS para criar estatísticas filtradas
O exemplo a seguir cria as estatísticas ContactPromotion1filtradas . O Mecanismo de Banco de Dados coleta amostras de 50% dos dados e, em seguida, seleciona as linhas com EmailPromotion igual a 2.
CREATE STATISTICS ContactPromotion1
ON Person.Person(BusinessEntityID, LastName, EmailPromotion)
WHERE EmailPromotion = 2
WITH SAMPLE 50 PERCENT;
GO
D. Criar estatísticas em uma tabela externa
A única decisão que você precisa tomar ao criar estatísticas em uma tabela externa, além de fornecer a lista de colunas, é criar as estatísticas por amostragem das linhas ou pela verificação de todas as linhas.
CREATE e DROP STATISTICS em tabelas externas não têm suporte no Banco de Dados SQL do Azure.
Como o SQL Server importa dados da tabela externa para uma tabela temporária para criar estatísticas, a opção de verificação completa leva muito mais tempo. Para uma tabela grande, o método de amostragem padrão geralmente é suficiente.
--Create statistics on an external table and use default sampling.
CREATE STATISTICS CustomerStats1
ON DimCustomer(CustomerKey, EmailAddress);
--Create statistics on an external table and scan all the rows
CREATE STATISTICS CustomerStats1
ON DimCustomer(CustomerKey, EmailAddress)
WITH FULLSCAN;
E. Use CREATE STATISTICS com FULLSCAN e PERSIST_SAMPLE_PERCENT
O exemplo a seguir cria as NamePurchase estatísticas para todas as linhas nas BusinessEntityID colunas e EmailPromotion da tabela e define uma porcentagem de amostragem de 100% para todas as atualizações subsequentes que não especificam explicitamente uma porcentagem de Person amostragem.
CREATE STATISTICS NamePurchase
ON AdventureWorks2022.Person.Person (BusinessEntityID, EmailPromotion)
WITH FULLSCAN, PERSIST_SAMPLE_PERCENT = ON;
Exemplos usando o banco de dados AdventureWorksDW
F. Criar estatísticas em duas colunas
O exemplo a seguir cria as CustomerStats1 estatísticas, com base nas CustomerKey colunas e EmailAddress da DimCustomer tabela. As estatísticas são criadas com base numa amostragem estatisticamente significativa das linhas da Customer tabela.
CREATE STATISTICS CustomerStats1
ON DimCustomer(CustomerKey, EmailAddress);
G. Criar estatísticas usando uma verificação completa
O exemplo a seguir cria as CustomerStatsFullScan estatísticas, com base na verificação de todas as linhas da DimCustomer tabela.
CREATE STATISTICS CustomerStatsFullScan
ON DimCustomer(CustomerKey, EmailAddress)
WITH FULLSCAN;
H. Criar estatísticas especificando a porcentagem da amostra
O exemplo a seguir cria as CustomerStatsSampleScan estatísticas, com base na verificação de 50% das linhas da DimCustomer tabela.
CREATE STATISTICS CustomerStatsSampleScan
ON DimCustomer(CustomerKey, EmailAddress)
WITH SAMPLE 50 PERCENT;
I. Use CREATE STATISTICS com AUTO_DROP
Para usar estatísticas de queda automática, basta adicionar o seguinte à WITH cláusula de estatísticas criar ou atualizar.
CREATE STATISTICS CustomerStats1
ON DimCustomer(CustomerKey, EmailAddress)
WITH AUTO_DROP = ON;
Para avaliar a configuração de queda automática em estatísticas existentes, use a auto_drop coluna em sys.stats:
SELECT object_id, [name], auto_drop
FROM sys.stats;