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 / 326523
Accepted
Pato
Pato
Asked: 2023-04-27 15:21:31 +0800 CST2023-04-27 15:21:31 +0800 CST 2023-04-27 15:21:31 +0800 CST

reconstruir índice no Oracle

  • 772
Esta pergunta foi migrada do Stack Overflow porque pode ser respondida no Database Administrators Stack Exchange. Migrado há 4 dias .

quando preciso reconstruir um index.

estamos usando em índices de bitmap de data warehouse. se eu truncar a tabela e não houver nenhuma linha e depois inserir novas linhas, um índice deve ser reconstruído, até onde eu sei, porque isso faz sentido.

É sempre verdadeiro quando uma nova linha é atualizada, inserida ou excluída, não importa se com instruções únicas ou usando a instrução de mesclagem, o Oracle atualiza todos os tipos de índices automaticamente?

oracle
  • 1 1 respostas
  • 10 Views

1 respostas

  • Voted
  1. Best Answer
    Paul W
    2023-04-27T19:13:07+08:002023-04-27T19:13:07+08:00

    Se você truncar uma tabela, todos os índices ficarão USABLEvazios. Na verdade, se um índice for UNUSABLEtruncado, na verdade o marcará USABLEpelo fato de saber que não há linhas.

    Quando você insert, update, delete, merge, etc., o Oracle mantém a validade dos índices reconstruindo seus blocos de folha e (às vezes) de ramificação com as entradas novas ou removidas. É por isso que ter um número excessivo de índices em uma tabela pode realmente tornar as operações DML mais lentas, principalmente inserções e exclusões. Isso vale tanto para índices de bitmap quanto de b-tree.

    Algumas inserções, entretanto, podem ser feitas no modo de caminho direto. INSERT /*+ APPEND */, inserções com parallel dmlhabilitado (que assume /*+ APPEND */mesmo se não declarado explicitamente), SQL*Loader com direct=true, etc.. eles adiarão a manutenção do índice até o final da instrução. Isso ajuda a acelerar consideravelmente o custo de manutenção de índices para operações em massa. Portanto, se você carregar um milhão de linhas, os índices serão ignorados durante o carregamento, mas depois que a última linha for inserida, ele reconstruirá os blocos de índice afetados para sincronizá-los.

    Portanto, enquanto seus índices permanecerem em um estado utilizável, eles sempre estarão sincronizados com os blocos de dados para os quais apontam. Os índices podem se tornar inutilizáveis ​​nessas circunstâncias:

    1. Você o marca como inutilizável ( alter index ... unusable)
    2. Você move o segmento da tabela ( alter table ... move) sem a update indexescláusula " ".
    3. Você faz uma troca de partição com a excluding indexesopção " "
    4. Você usa o SQL*Loader no caminho direto, mas com a SKIP_INDEX_MAINTENANCEopção definida, ou um índice exclusivo encontra linhas duplicadas durante a fase de manutenção do índice.
    5. Qualquer outra operação em massa que adie a manutenção do índice e contenha uma confirmação implícita falha durante a fase de manutenção do índice devido a algum problema (chaves duplicadas, falta de espaço, travamento da instância, etc.). Idealmente, as alterações de dados seriam revertidas nesse caso, mas vimos problemas como esse em versões anteriores do Oracle aparecerem de vez em quando.

    Se algum dos motivos acima fizer com que os índices se tornem inutilizáveis, os índices ou as partições afetadas deles precisarão ser reconstruídos manualmente ( ALTER INDEX ... REBUILD). Até que isso seja feito, as alterações na tabela não são mais mantidas em sincronia com os índices... um índice inutilizável é na verdade um índice vazio, na verdade inexistente do ponto de vista espacial, apenas um objeto lógico sem segmento de dados subjacente. Reconstruí-lo na verdade cria um segmento para que ele use espaço e contenha entradas. Depois de reconstruído, ele será mantido em sincronia com outras alterações de dados.

    • 1

relate perguntas

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • ORDER BY usando prioridades personalizadas para colunas de texto

  • Interface sqlplus confortável? [fechado]

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

Sidebar

Stats

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • 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
    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