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 / 21000
Accepted
FrankRuperto
FrankRuperto
Asked: 2012-07-14 02:03:27 +0800 CST2012-07-14 02:03:27 +0800 CST 2012-07-14 02:03:27 +0800 CST

Um índice de cluster oferece mais benefícios do que pré-classificar o arquivo de carregamento e criar um índice sem cluster?

  • 772

Informix 11.70.TC4DE:

CREATE TABLE cluster_tbl
    (
fk_id INT,
data CHAR(2048)
    );

LOAD FROM "presorted.ld" INSERT INTO cluster_tbl;

CREATE UNIQUE CLUSTER INDEX cl_idx ON cluster_tbl(fk_id);

{###}

CREATE TABLE noncluster_tbl
    (
fk_id INT,
data CHAR(2048)
    );

LOAD FROM "presorted.ld" INSERT INTO noncluster_tbl;

CREATE UNIQUE INDEX ncl_idx ON noncluster_tbl(fk_id);

{###}

UPDATE STATISTICS;

Entendo que um índice de cluster é essencialmente o mesmo que pré-classificar o arquivo de carregamento, inseri-lo na tabela e criar o índice para a coluna de chave estrangeira.

Criei duas tabelas, cada uma carregada com 2 milhões de linhas de dados idênticos, pré-classificados pela chave estrangeira. No entanto, uma tabela possui um índice de cluster em fk_id, a outra tabela com um índice não clusterizado em fk_id.

Existe alguma diferença na estrutura da árvore ou sobrecarga adicional em manter ou acessar dados de uma tabela com um índice de cluster em comparação com a mesma tabela/dados com um índice sem cluster?

index informix
  • 2 2 respostas
  • 1094 Views

2 respostas

  • Voted
  1. MatBailie
    2012-07-14T02:12:26+08:002012-07-14T02:12:26+08:00

    A ordem em que você insere os dados em uma tabela não garante a ordem dos dados neste disco.

    Mesmo que a ordem seja como você deseja, ela não está estruturada de forma que o otimizador saiba que é pesquisável por essa ordem. (Será tratado como não ordenado.)

    Quando você tem um índice não clusterizado e precisa usar campos não cobertos pelo próprio índice, o índice contém apenas um ponteiro para os dados. Isso é semelhante à introdução de uma junção extra; uma etapa rápida, mas uma etapa extra definitiva no carregamento desses dados.


    Resumindo, quase sempre deve ser vantajoso ter um índice agrupado (exceto em circunstâncias como inserir dados repetidamente em posições aleatórias na tabela) .

    O que é contrário à sua experiência...

    Então, quais são as consultas que você está executando? Pode ser que algo contra-intuitivo esteja acontecendo, mas ainda pode ser explicável.

    • Você nos deu o esquema, obrigado.
    • Você poderia incluir também as consultas de teste que está usando?
    • E você poderia incluir também a metodologia e os resultados para medir o desempenho?
    • E, por fim, se possível, os planos de execução de cada consulta?
    • 2
  2. Best Answer
    Jonathan Leffler
    2012-07-16T15:01:47+08:002012-07-16T15:01:47+08:00

    Em um banco de dados Informix, não há muita diferença entre a tabela e o índice criado ao carregar uma tabela vazia em ordem pré-classificada e criar um índice clusterizado na tabela na mesma ordem. Assim, o resultado líquido é basicamente o mesmo. Além disso, não há implicações de longo prazo para nenhum dos métodos; O Informix não mantém o índice clusterizado em ordem após a operação inicial de clustering. O benefício de desempenho de um índice clusterizado com Informix é um efeito de segunda ordem; há um pequeno benefício ao selecionar os dados na ordem agrupada, mas não é um grande benefício.

    No entanto, existem vantagens práticas consideráveis ​​em usar CREATE [UNIQUE] CLUSTER INDEX <idxname> ON <tablename>(<columnlist>)ou usar ALTER INDEX <idxname> TO CLUSTER. Isso inclui o fato de que você não precisa descartar a tabela (e, assim, destruir as visualizações selecionadas na tabela ou perder as permissões concedidas na tabela - embora eu suponha que você possa fazer uma exclusão completa da tabela ou até mesmo truncar a tabela, em vez disso de descartar a tabela), e você não precisa armazenar explicitamente os dados em um arquivo e economiza o custo de transferir os dados do DBMS para o aplicativo para salvar os dados e o custo de transferir os dados do aplicativo de volta ao DBMS ao recriar (recarregar) a tabela.

    Então, a menos que haja motivos para querer uma cópia dos dados fora do banco de dados, não adianta usar o mecanismo UNLOAD e LOAD; é melhor usar um índice clusterizado porque é mais fácil gerenciar a operação dessa maneira.

    • 2

relate perguntas

  • Como criar várias entradas no índice com base nos campos de uma linha?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quanto "Padding" coloco em meus índices?

  • O que significa "índice" em RDBMSs? [fechado]

  • Como criar um índice condicional no MySQL?

Sidebar

Stats

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

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

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

    Como selecionar a primeira linha de cada grupo?

    • 6 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
    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
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +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