Este tópico descreve como usar a extensão HypoPG para criar índices hipotéticos em uma instância do ApsaraDB RDS for PostgreSQL. Use os índices hipotéticos criados para verificar se a indexação melhora o desempenho das consultas. Índices hipotéticos não são índices reais e não consomem recursos como núcleos de CPU ou espaço em disco.
Pré-requisitos
-
A instância RDS deve executar a versão secundária do mecanismo 20230830 ou posterior. Se a instância RDS usar o PostgreSQL 17, a versão secundária do mecanismo deverá ser 20241030 ou posterior.
ImportanteAlgumas versões secundárias do mecanismo anteriores a 20230830 suportam esta extensão. No entanto, o ApsaraDB RDS planeja otimizar extensões vulneráveis nas atualizações de versão secundária para padronizar o gerenciamento de extensões e aumentar a segurança. Portanto, não é possível criar esta extensão em instâncias RDS que executam uma versão secundária do mecanismo anterior a 20230830. Para mais informações, consulte Restrictions on extension creation for RDS for PostgreSQL.
Se você já criou esta extensão em uma instância RDS com versão secundária do mecanismo anterior a 20230830, pode continuar a usá-la.
Se estiver criando esta extensão pela primeira vez ou precisar recriá-la na instância RDS, atualize a versão secundária do mecanismo da instância para a versão mais recente. Para mais informações, consulte Update the minor engine version.
Use uma conta privilegiada para conectar-se à instância RDS. Verifique o tipo de conta usada na página Accounts no console do ApsaraDB RDS. Se a conta for padrão, crie uma conta privilegiada e use-a para conectar-se à instância RDS. Para mais informações, consulte Create an account.
Ativar ou desativar a extensão HypoPG
Os índices hipotéticos são válidos apenas na sessão atual.
-
Execute o seguinte comando para ativar a extensão HypoPG:
CREATE EXTENSION hypopg;NotaSomente contas privilegiadas têm permissão para executar o comando anterior.
-
Execute o seguinte comando para desativar a extensão HypoPG:
DROP EXTENSION hypopg;NotaSomente contas privilegiadas têm permissão para executar o comando anterior.
Exemplos
-
Crie uma tabela e insira dados de teste.
create extension hypopg; CREATE TABLE hypo (id integer, val text) ; INSERT INTO hypo SELECT i, 'line ' || i FROM generate_series(1, 100000) i ; VACUUM ANALYZE hypo ; -
Verifique o desempenho dos planos de execução das instruções SQL sem índices na tabela.
EXPLAIN SELECT val FROM hypo WHERE id = 1; QUERY PLAN -------------------------------------------------------- Seq Scan on hypo (cost=0.00..1791.00 rows=1 width=14) Filter: (id = 1) (2 rows) -
Crie um índice hipotético.
SELECT * FROM hypopg_create_index('CREATE INDEX ON hypo (id)') ; indexrelid | indexname ------------+---------------------- 18284 | <18284>btree_hypo_id (1 row) -
Verifique se o índice hipotético melhora o desempenho da consulta nos planos de execução.
EXPLAIN SELECT val FROM hypo WHERE id = 1; QUERY PLAN ---------------------------------------------------------------------------------- Index Scan using <18284>btree_hypo_id on hypo (cost=0.04..8.06 rows=1 width=10) Index Cond: (id = 1) (2 rows) -
Analise os planos de execução das instruções SQL executadas. O índice hipotético criado não é usado nos planos de execução reais.
EXPLAIN ANALYZE SELECT val FROM hypo WHERE id = 1; QUERY PLAN --------------------------------------------------------------------------------------------------- Seq Scan on hypo (cost=0.00..1791.00 rows=1 width=10) (actual time=0.046..46.390 rows=1 loops=1) Filter: (id = 1) Rows Removed by Filter: 99999 Planning time: 0.160 ms Execution time: 46.460 ms (5 rows)
Referências
Para obter mais informações sobre o HypoPG, consulte Usage of HypoPG.