AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 31514
Accepted
Nick Ginanto
Nick Ginanto
Asked: 2013-01-07 12:32:19 +0800 CST2013-01-07 12:32:19 +0800 CST 2013-01-07 12:32:19 +0800 CST

Como sei quais índices criar para uma tabela?

  • 772

Existe uma maneira de descobrir a melhor maneira de saber quais índices criar para uma tabela?

database-design postgresql
  • 3 3 respostas
  • 27682 Views

3 respostas

  • Voted
  1. Best Answer
    Mike Sherrill 'Cat Recall'
    2013-01-07T14:42:41+08:002013-01-07T14:42:41+08:00

    Regras curtas. (Alguns deles são criados automaticamente, mas podem ser descartados manualmente mais tarde, dependendo de seus dbms. Não assuma que você sempre trabalhará no PostgreSQL.)

    • Indexe cada chave primária.
    • Indexe cada chave estrangeira.
    • Indexe cada coluna usada em uma cláusula JOIN.
    • Indexe cada coluna usada em uma cláusula WHERE.
    • Estude sua documentação para aprender as opções de indexação "esotéricas" que seu dbms suporta.

    Cada chave primária significa que as chaves primárias de várias colunas devem ter um único índice cobrindo todas as colunas. O PostgreSQL criará esse índice automaticamente se você declarar uma chave primária de várias colunas.

    Há muitos casos em que um único índice de várias colunas oferece melhor desempenho do que vários índices de coluna única. Monitore consultas lentas e faça testes para descobrir qual é qual.

    Suponha que qualquer alteração na indexação melhorará algumas atividades do banco de dados e degradará outras. Acho útil ter um conjunto de instruções SQL que eu possa criar perfil antes e depois de fazer alterações nos índices. Este conjunto inclui instruções SELECT, INSERT, UPDATE e DELETE.

    Não há substituto para estudar os documentos para seus dbms específicos.

    • CRIAR ÍNDICE
    • Índices (Observe especialmente as seções sobre expressões de indexação, sobre índices parciais e sobre como examinar o uso do índice)
    • 39
  2. Erwin Brandstetter
    2013-01-07T19:27:30+08:002013-01-07T19:27:30+08:00

    Além do que o @Catcall já forneceu , e para adicionar um pequeno corretivo.

    As respostas até agora parecem indicar que você precisaria criar índices em chaves primárias, mas esse não é o caso do PostgreSQL (exceções parciais se aplicam). O manual:

    O PostgreSQL cria automaticamente um índice exclusivo quando uma restrição exclusiva ou chave primária é definida para uma tabela. O índice abrange as colunas que compõem a chave primária ou restrição exclusiva (um índice de várias colunas, se apropriado) e é o mecanismo que impõe a restrição.

    Minha ênfase em negrito.

    Você pode querer criar índices adicionais para a segunda coluna ou colunas posteriores de um índice de várias colunas, mas o primeiro geralmente é coberto muito bem por um índice de várias colunas - exceto quando colunas adicionais tornam o índice muito maior. Discutimos isso em detalhes nesta questão relacionada:

    • Um índice composto também é bom para consultas no primeiro campo?

    Índices de várias colunas , índices parciais e índices em expressões são ferramentas particularmente poderosas no PostgreSQL. Desde o PostgreSQL 9.2 também existem scans somente de índice , preenchendo o papel de "cobrir índices" em outros RDBMS. Este não é outro tipo de índice, mas um novo recurso do RDBMS com tipos de índice existentes.

    Cada índice carrega custos específicos , portanto, não há como contornar alguns conhecimentos básicos para realmente otimizar a indexação. Apenas criar mais índices pode fazer mais mal do que bem. Em particular, os índices podem impedir que as atualizações HOT melhorem o desempenho.

    Geralmente, as operações de gravação ( INSERT, DELETE, UPDATE) se tornam mais caras (mas as duas últimas também podem se beneficiar!), enquanto as operações de leitura ( SELECT) geralmente se beneficiam. Muitos índices podem esgotar a memória cache, de modo que até mesmo as operações de leitura podem sofrer.

    Esta página do Postgres Wiki sobre manutenção de índices apresenta ferramentas para encontrar índices duplicados ou não utilizados, entre outras coisas.

    Resposta relacionada no SO:

    • Otimizar tabelas somente leitura do PostgreSQL
    • 17
  3. Evan Carroll
    2017-10-01T11:42:06+08:002017-10-01T11:42:06+08:00

    Existem duas opções.

    1. Faz você.
    2. A tecnologia faz isso.

    A resposta para fazer você mesmo é bastante exaustivamente documentada aqui. Então vamos ver outra coisa.

    Pghero

    A Pghero pode ajudá-lo se você quiser alguns conselhos automatizados.

    Dito isto, tem algumas deficiências.

    1. Ele só funciona em WHEREe ORDER BY, não JOINS.
    2. Ele usa apenas estatísticas de porcentagem NULL e valores distintos.

    Confira este vídeo para mais informações .

    • 2

relate perguntas

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve