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 / 129504
Accepted
Prabhakar
Prabhakar
Asked: 2016-02-18 01:16:07 +0800 CST2016-02-18 01:16:07 +0800 CST 2016-02-18 01:16:07 +0800 CST

Como criar índice clusterizado e não clusterizado no Oracle?

  • 772

Eu cavei algumas horas em relação à minha pergunta e não obtive resposta satisfatória. Ainda tenho dúvida. Eu encontrei o seguinte sobre o índice clusterizado:

  1. Os dados são armazenados na ordem do índice clusterizado.
  2. Apenas um índice clusterizado por tabela.
  3. Quando uma chave primária é criada, um índice clusterizado também é criado automaticamente.

Eu tenho esses pontos, mas minhas perguntas são:

  1. O índice clusterizado existe no banco de dados Oracle? pois li em alguns blogs "Oracle não tem um conceito de índice clusterizado."
  2. Se sim, por favor, deixe-me saber a instrução sql para criar um índice clusterizado .
  3. Como dito acima, o índice clusterizado é criado automaticamente quando a chave primária é definida em uma coluna de uma tabela, como posso verificar o tipo de índice se ele é criado ou não?

Por favor, encontre minha arquitetura de tabela:

insira a descrição da imagem aqui

Deixe-me saber se mais alguma coisa é necessária para obter respostas para essas perguntas.

oracle clustered-index
  • 4 4 respostas
  • 55549 Views

4 respostas

  • Voted
  1. Best Answer
    a_horse_with_no_name
    2016-02-18T02:29:23+08:002016-02-18T02:29:23+08:00

    O índice clusterizado existe no banco de dados Oracle? desde que li em alguns blogs

    Sim existe.

    É chamado de "tabela organizada de índice" (IOT) - que na minha opinião é o melhor nome, pois deixa absolutamente claro que o índice e a tabela são a mesma coisa física (que é a razão pela qual podemos ter apenas um índice clusterizado no SQL Server)

    Se sim, por favor, deixe-me saber a instrução SQL para criar um índice de cluster.

    Não existe tal coisa como create clustered indexno Oracle.

    Para criar uma tabela organizada por índice, use a create tableinstrução com a organization indexopção.

    No Oracle você costuma usar IOTs para tabelas muito estreitas. Muitas vezes para tabelas que consistem apenas nas colunas de chave primária (por exemplo, tabelas de mapeamento m:n), por exemplo

    create table assignment
    (
       person_id  integer not null, 
       job_id     integer not null, 
       primary key (person_id, job_id)
    )
    organization index;
    

    Você pode criar IOTs com mais colunas, nesse caso você precisa definir as colunas não-pk como colunas "incluídas". Por exemplo, se a tabela de atribuição deve ter colunas adicionais, como data de início e término, que não fazem parte da chave primária:

    create table assignment
    (
       person_id   integer not null, 
       job_id      integer not null, 
       start_date  date, 
       end_date    date,
       primary key (person_id, job_id)
    )
    organization index
    including start_date
    overflow storage (initial 4k);
    

    Consulte o manual para obter mais detalhes e exemplos: https://docs.oracle.com/database/121/SQLRF/statements_7002.htm#i2153235


    Um pouco não relacionado, mas talvez interessante de qualquer maneira:

    Uma postagem de blog interessante que questiona o comportamento do SQL Server (e do MySQL) de usar um índice clusterizado como padrão ao criar uma tabela:

    Padrões não razoáveis: chave primária como chave de cluster

    Vindo de um background Oracle, concordo plenamente com isso.

    • 24
  2. ypercubeᵀᴹ
    2016-02-18T02:14:44+08:002016-02-18T02:14:44+08:00

    Eu encontrei o seguinte sobre o índice clusterizado:

    1. Os dados são armazenados na ordem do índice clusterizado.
    2. Apenas um índice clusterizado por tabela.
    3. Quando uma chave primária é criada, um índice de cluster também é criado automaticamente.

    Você cavou um par de horas. Você deve ter notado que todos os fatos acima são para SQL Server e não para Oracle .

    As tabelas (pelo menos as comuns) no Oracle não possuem um índice clusterizado. Existe um tipo especial de tabelas, chamadas Tabelas Organizadas por Índice (IOT) que são de conceito semelhante. Detalhes na documentação do Oracle (9i): Tabelas Organizadas por Índice :

    O que são tabelas organizadas por índice?

    Uma tabela organizada por índice - em contraste com uma tabela comum - tem sua própria maneira de estruturar, armazenar e indexar dados. Uma comparação com uma tabela comum pode ajudar a explicar sua singularidade.

    Tabelas organizadas por índice versus tabelas comuns

    Uma linha em uma tabela comum tem uma localização física estável. Uma vez que esta localização é estabelecida, a linha nunca se move completamente. Mesmo que seja parcialmente movido com a adição de novos dados, sempre há um pedaço de linha no endereço físico original - identificado pelo rowid físico original - a partir do qual o sistema pode encontrar o restante da linha. Enquanto a linha existir, seu rowid físico não será alterado. Um índice em uma tabela comum armazena os dados da coluna e o rowid.

    Uma linha em uma tabela organizada por índice não possui um local físico estável. Ele mantém os dados ordenados, nas folhas de um índice B*-tree construído na chave primária da tabela. Essas linhas podem se mover para preservar a ordem classificada. Por exemplo, uma inserção pode fazer com que uma linha existente se mova para um slot diferente ou até mesmo para um bloco diferente.

    As folhas do índice da árvore B* contêm a chave primária e os dados reais da linha. As alterações nos dados da tabela - por exemplo, adicionar novas linhas ou atualizar ou excluir linhas existentes - resultam apenas na atualização do índice.

    Veja também a documentação sobre (11g): Index Organized Tables na versão mais recente do Oracle 11g.

    • 10
  3. HankerPL
    2019-02-03T07:48:23+08:002019-02-03T07:48:23+08:00

    Não há possibilidade de criar um índice clusterizado, mas é possível adicionar alguns recursos para obter quase o mesmo resultado: (B-Tree & Bitmap INDX) 1. STEP - criar cluster para uma ou mais tabelas - referência, por exemplo, PK - coluna comum 2. STEP - adicione algumas tabelas ao cluster 3. STEP - crie CLUSTERED INDEX dentro de um CLUSTER - veja o último sql stmt (INDEX_TYPE=CLUSTERED CLUSTERING_FACTOR=1)

    insira a descrição da imagem aqui

    • -2
  4. HankerPL
    2019-01-21T16:35:08+08:002019-01-21T16:35:08+08:00

    CRIAR CLUSTER employees_departments_cluster (department_id NUMBER(4)) TAMANHO 512;

    CREATE TABLE funcionários (department_id number(4), ename varchar2(10), empno int ) CLUSTER employees_departments_cluster (department_id);

    CREATE TABLE departamentos ( department_id number(4), dname varchar2(10), sales int ) CLUSTER employees_departments_cluster (department_id);

    CRIAR ÍNDICE idx_emp_dept_cluster NO CLUSTER employees_departments_cluster; inserir nos departamentos valores (1,'d1',1000); inserir nos valores dos funcionários (1,'emp123',123); inserir nos funcionários os valores (1,'emp124',124); inserir nos funcionários valores (1,'emp125',125);

    selecione INDEX_NAME, INDEX_TYPE, TABLE_NAME, TABLE_TYPE, CLUSTERING_FACTOR de DBA_INDEXES WHERE INDEX_NAME=UPPER('idx_emp_dept_cluster') ;

    INDEX_NAME, INDEX_TYPE, TABLE_NAME, TABLE_TYPE, CLUSTERING_FACTOR IDX_EMP_DEPT_CLUSTER,CLUSTER,EMPLOYEES_DEPARTMENTS_CLUSTER,CLUSTER,1

    • -7

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