W przypadku braku indeksu znalezienie wiersza spełniającego pewien warunek wymagałoby przejrzenia wiersz po wierszu całej tabeli. W przypadku dużych i bardzo dużych tabel, takie wyszukiwanie mogłoby trwać bardzo długo.
W związku z drzewiastą konstrukcją indeksu można szybko znaleźć położenie poszukiwanych wierszy. Sprawia to że wyszukiwanie trwa zawsze krótko.
Tworzenie indeksu
Ogólna konstrukcja polecenia tworzącego indeks:
CREATE INDEX NAZWA_INDEKSU ON NAZWA_TABELI (KOLUMNA,KOLUMNA2);
Indeksy możemy zakładać na więcej niż jednej kolumnie. Wystarczy dodać je po przecinku.
Indeksy warto zakładać na tych kolumnach które często występują w zapytaniach jako warunek w filtracji wierszy. Wraz z zmianą zawartości tabeli spada wydajność stworzonych indeksów. Dlatego należy co jakiś czas odtwarzać indeksy od nowa.
Usuwanie indeksu
DROP INDEX NAZWA_INDEKSU
Ćwiczenia
- Stwórz tabelę „Miasta” zawierającą: id, nazwę miasta, klucz obcy do tabeli regions.
- Załóż klucz główny na pole id tabeli „Miasta”.
- Załóż klucz unikalny na pole z nazwą miasta.
- Dodaj do tabeli „Miasta” pole „dzielnica”
- Załóż indeks na pole „dzielnica”
Ten temat omawiam na poniższych szkoleniach:
• Podstawy Oracle SQL
• Podstawy SQL i PL/SQL
Możesz w nich uczestniczyć, a jako czytelnik tego bloga otrzymasz 10% zniżki - poinformuj o tym fakcie konsultanta.
1. CREATE TABLE City
OdpowiedzUsuń( city_id numeric(10) not null,
city_name varchar2(50) not null,
CONSTRAINT Klucz_do_regions
FOREIGN KEY (REGION_NAME,REGION_ID)
REFERENCES REGIONS(REGION_NAME,REGION_ID))
błąd ora-00904
create table miasta2(
Usuńid_miasta numeric not null,
nazwa_miasta numeric not null,
constraint klucz_region
foreign key (id_miasta)
references regions(REGION_ID));
1.create table miasta(
OdpowiedzUsuńid number(3) ,
nazwa_miasta varchar(20),
region_id number(5) constraint region_ref references regions(region_id)
);
2.alter table miasta add constraint klucz_gl primary key(id);
3.alter table miasta add(dzielnice varchar(30) default 'nie podano');
4.alter table miasta add constraint unikalne_miasta unique(nazwa_miasta);
5.create index id_dzielnice on miasta(dzielnice);
Mam pytanie, czy indexy usuwają się wraz z usunięciem tabeli?
OdpowiedzUsuńcreate table cities(
OdpowiedzUsuńid number(11),
name varchar(50)
);
alter table cities add CONSTRAINT klucz_glowny PRIMARY KEY(id);
alter table cities add(reg_id number(10));
alter table cities add constraint fk_region foreign key(reg_id) REFERENCES regions(region_id);
alter table cities add constraint unique_city_name unique(name);
alter table cities add(district varchar2(10));
create index id_districts on cities(district);