Anónimo
Indices
¿Alguien sabe como crear un index que tengan datos de varias tablas?
Yo creo crear un index por Foreing Key y no se como
Yo creo crear un index por Foreing Key y no se como
1 respuesta
Respuesta de damen68
0
0
damen68, Experto Oracle PL/SQL, DBA
ALTER TABLE Emp_tab
ADD FOREIGN KEY (Deptno) REFERENCES Dept_tab(Deptno);
Así creas una FK, luego puedes crear un indice sobre esa columna + otras de la misma tabla si lo deseas...
Éxitos!
:=)
ADD FOREIGN KEY (Deptno) REFERENCES Dept_tab(Deptno);
Así creas una FK, luego puedes crear un indice sobre esa columna + otras de la misma tabla si lo deseas...
Éxitos!
:=)
Y como hago el indice sobre la FK, podrías ponerme un ejemplo, yo he probado con lo siguiente y no funciona
/
create table "infoteck". "area_tienda"
(
"ID_EMPLEADO" CHAR(10) NOT NULL,
"ID_AREA" DECIMAL(5) NOT NULL,
"DESCRICION" CHAR(20) NULL
)TABLESPACE "INFOTECK"
/
CREATE TABLE "INFOTECK"."TIENDA"
(
"ID_EMPLEADO" CHAR(10) NOT NULL,
"ID_TIENDA" DECIMAL(5) NOT NULL,
"ID_AREA" DECIMAL(5) NOT NULL,
"NOMBRE" CHAR(40) NULL,
"PAIS" CHAR(30) NULL,
"COMUNIDAD" CHAR(20) NULL,
"PROVINCIA" CHAR(20) NULL,
"CIUDAD" CHAR(20) NULL,
"BARRIO/POLIGONO" CHAR(20) NULL,
"CALLE" CHAR(20) NULL,
"CODIGO_POST" DECIMAL(5) NULL,
"PORTAL/NAVE" DECIMAL(3) NULL,
"ESCARELA" CHAR(5) NULL,
"PISO" DECIMAL(3) NULL,
"PUERTA" CHAR(5) NULL,
"E_MAIL" CHAR(50) NULL,
"TELEF1" DECIMAL(10) NULL,
"TELEF2" DECIMAL(10) NULL,
"MOVIL" DECIMAL(10) NULL,
"FAX" DECIMAL(10) NULL,
"APARTADO" CHAR(5) NULL,
"CP_APARTADO" DECIMAL(5) NULL,
"PER_CONT" CHAR(30) NULL,
"TELF_PER_CONT" DECIMAL(10) NULL
)TABLESPACE "INFOTECK"
/
ALTER TABLE "INFOTECK"."TIENDA"
ADD CONSTRAINT "FK_AREATIENDA_TIENDA"
FOREIGN KEY ( "ID_AREA" )
REFERENCES "INFOTECK"."AREA_TIENDA"
("ID_AREA" )
using INDEX tablespace "INF_INDX"
/
/
create table "infoteck". "area_tienda"
(
"ID_EMPLEADO" CHAR(10) NOT NULL,
"ID_AREA" DECIMAL(5) NOT NULL,
"DESCRICION" CHAR(20) NULL
)TABLESPACE "INFOTECK"
/
CREATE TABLE "INFOTECK"."TIENDA"
(
"ID_EMPLEADO" CHAR(10) NOT NULL,
"ID_TIENDA" DECIMAL(5) NOT NULL,
"ID_AREA" DECIMAL(5) NOT NULL,
"NOMBRE" CHAR(40) NULL,
"PAIS" CHAR(30) NULL,
"COMUNIDAD" CHAR(20) NULL,
"PROVINCIA" CHAR(20) NULL,
"CIUDAD" CHAR(20) NULL,
"BARRIO/POLIGONO" CHAR(20) NULL,
"CALLE" CHAR(20) NULL,
"CODIGO_POST" DECIMAL(5) NULL,
"PORTAL/NAVE" DECIMAL(3) NULL,
"ESCARELA" CHAR(5) NULL,
"PISO" DECIMAL(3) NULL,
"PUERTA" CHAR(5) NULL,
"E_MAIL" CHAR(50) NULL,
"TELEF1" DECIMAL(10) NULL,
"TELEF2" DECIMAL(10) NULL,
"MOVIL" DECIMAL(10) NULL,
"FAX" DECIMAL(10) NULL,
"APARTADO" CHAR(5) NULL,
"CP_APARTADO" DECIMAL(5) NULL,
"PER_CONT" CHAR(30) NULL,
"TELF_PER_CONT" DECIMAL(10) NULL
)TABLESPACE "INFOTECK"
/
ALTER TABLE "INFOTECK"."TIENDA"
ADD CONSTRAINT "FK_AREATIENDA_TIENDA"
FOREIGN KEY ( "ID_AREA" )
REFERENCES "INFOTECK"."AREA_TIENDA"
("ID_AREA" )
using INDEX tablespace "INF_INDX"
/
Se perfectamente como se crea una FOREIGN KEY y también se como se crea un index sobre un campo o más de una tabla, pero una foreign influye sobre dos tablas diferentes, ¿cómo puedo hacer un index que ataque a las dos tablas de la FOREIGN KEY?
Haces un indice sobre la FK... y esto atacará los campos que ésta hace referencia... ¿Qué te ocurre si haces esto?
EL "ID_AREA" de INFOTECK"."AREA_TIENDA" debe ser Unique o Primary Key, si es asi que error te tira?
Éxitos!
:=)
Éxitos!
:=)
No se definen tablespaces para Primary Key o Foreign Key... si en cambio para indices... es diferente una constraint a un indice a ese nivel...
Me dice que la clausula using INDEX tablespace "INF_INDX"
No es permitida en una FOREIGN KEY
No es permitida en una FOREIGN KEY
Una primary key es un indice
alter table "infoteck"."albaranes"
ADD CONSTRAINT "PK_ALBARANES"
PRIMARY KEY ( "SERIE", "NUMERO" )
using INDEX tablespace "INF_INDX";
/
Pero sigues sin sacarme de dudas
¿Como se puede crear un index sobre una foreing Key o que abarque los campos de una foreing key, teniendo en cuenta que una foreing Key hace referencia a dos tablas.
alter table "infoteck"."albaranes"
ADD CONSTRAINT "PK_ALBARANES"
PRIMARY KEY ( "SERIE", "NUMERO" )
using INDEX tablespace "INF_INDX";
/
Pero sigues sin sacarme de dudas
¿Como se puede crear un index sobre una foreing Key o que abarque los campos de una foreing key, teniendo en cuenta que una foreing Key hace referencia a dos tablas.
Normal Btree Index
Create Index myIndex on MyTable(myFkLinkID);
Bitmap
Create BITMAP Index myIndex on MYTable(myFKLinkID);
Mas info:
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_510a.htm#2077554
Otro ejemplo de bitmap:
CREATE BITMAP INDEX partno_ix
ON lineitem(partno)
TABLESPACE ts1
LOCAL (PARTITION quarter1 TABLESPACE ts2,
PARTITION quarter2 STORAGE (INITIAL 10K NEXT 2K),
PARTITION quarter3 TABLESPACE ts2,
PARTITION quarter4);
;=)
Create Index myIndex on MyTable(myFkLinkID);
Bitmap
Create BITMAP Index myIndex on MYTable(myFKLinkID);
Mas info:
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_510a.htm#2077554
Otro ejemplo de bitmap:
CREATE BITMAP INDEX partno_ix
ON lineitem(partno)
TABLESPACE ts1
LOCAL (PARTITION quarter1 TABLESPACE ts2,
PARTITION quarter2 STORAGE (INITIAL 10K NEXT 2K),
PARTITION quarter3 TABLESPACE ts2,
PARTITION quarter4);
;=)
No importa a cuantas tablas referencie tu FK: Simplemente creas un indice para tu FK.-
create index mi_indice on mi_tabla(col1_tab1,col2_tab1,col1_tab2)
where FK = col1_tab1 & col2_tab1 from table1 + col1_tab2 from table 2;
create index mi_indice on mi_tabla(col1_tab1,col2_tab1,col1_tab2)
where FK = col1_tab1 & col2_tab1 from table1 + col1_tab2 from table 2;
Me da error
1 create index "INF_INDX"."IND_AREATIENDA_TIENDA2"
2 on "INFOTECK"."TIENDA"("ID_AREA")
3 where FOREIGN KEY = "ID_AREA" from "INFOTECK"."TIENDA" +
4* "ID_AREA" from "INFOTECK"."AREA_TIENDA"
where FOREIGN KEY = "ID_AREA" from "INFOTECK"."TIENDA" +
*
ERROR en línea 3:
ORA-02158: opción CREATE INDEX no válida
1 create index "INF_INDX"."IND_AREATIENDA_TIENDA2"
2 on "INFOTECK"."TIENDA"("ID_AREA")
3 where FOREIGN KEY = "ID_AREA" from "INFOTECK"."TIENDA" +
4* "ID_AREA" from "INFOTECK"."AREA_TIENDA"
where FOREIGN KEY = "ID_AREA" from "INFOTECK"."TIENDA" +
*
ERROR en línea 3:
ORA-02158: opción CREATE INDEX no válida
CREATE BITMAP INDEX partno_ix
Me podrias esplicar los elementos de esta instruccion
¿Qué es lineitem?
¿Que es partno?
¿Que es partition?
¿que es quarter1?
CREATE BITMAP INDEX partno_ix
ON lineitem(partno)
TABLESPACE ts1
LOCAL (PARTITION quarter1 TABLESPACE ts2,
PARTITION quarter2 STORAGE (INITIAL 10K NEXT 2K),
PARTITION quarter3 TABLESPACE ts2,
PARTITION quarter4);
Me podrias esplicar los elementos de esta instruccion
¿Qué es lineitem?
¿Que es partno?
¿Que es partition?
¿que es quarter1?
CREATE BITMAP INDEX partno_ix
ON lineitem(partno)
TABLESPACE ts1
LOCAL (PARTITION quarter1 TABLESPACE ts2,
PARTITION quarter2 STORAGE (INITIAL 10K NEXT 2K),
PARTITION quarter3 TABLESPACE ts2,
PARTITION quarter4);
¿Esto es lo que querías?...
1* Create table mytab1( a number primary key)
1* Create table mytab2( a number primary key)
1* Create table mytab3( a number references mytab1, b number references mytab2)
1* Create index myindex on mytab3(a, b)
;=)
1* Create table mytab1( a number primary key)
1* Create table mytab2( a number primary key)
1* Create table mytab3( a number references mytab1, b number references mytab2)
1* Create index myindex on mytab3(a, b)
;=)
Lineitem es la table, partno es la columna...
Partition es una partición y quarter es que son 4 cuartos... te recomendaría que investigues sobre BITMAP INDEX en la documentación de Oracle...
Partition es una partición y quarter es que son 4 cuartos... te recomendaría que investigues sobre BITMAP INDEX en la documentación de Oracle...
No, en primer lugar el index de la 4ª linea afecta a una sola tabla, en segundo lugar esos dos campos tienen que ser por cojones la clave primaria de maytab3 y como clave primaria que deberían ser, ya disponen de su propio Index
Yo que quisiera saber es si es posible crear un indice que coja el campo a de la tabla mytab2 y el campo a de la tabla mytab3
Yo que quisiera saber es si es posible crear un indice que coja el campo a de la tabla mytab2 y el campo a de la tabla mytab3
Por supuesto Oracle 9i Reelased 2
- Compartir respuesta
- Anónimo
ahora mismo