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:
- Os dados são armazenados na ordem do índice clusterizado.
- Apenas um índice clusterizado por tabela.
- Quando uma chave primária é criada, um índice clusterizado também é criado automaticamente.
Eu tenho esses pontos, mas minhas perguntas são:
- O índice clusterizado existe no banco de dados Oracle? pois li em alguns blogs "Oracle não tem um conceito de índice clusterizado."
- Se sim, por favor, deixe-me saber a instrução sql para criar um índice clusterizado .
- 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:
Deixe-me saber se mais alguma coisa é necessária para obter respostas para essas perguntas.
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)
Não existe tal coisa como
create clustered index
no Oracle.Para criar uma tabela organizada por índice, use a
create table
instrução com aorganization index
opçã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
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:
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.
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 :
Veja também a documentação sobre (11g): Index Organized Tables na versão mais recente do Oracle 11g.
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)
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