poniedziałek, 8 listopada 2010

Kurs Oracle SQL. Indeksy


Indeksy pozwalają zdecydowanie przyspieszyć wyszukiwanie wierszy w tabelach.
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

  1. Stwórz tabelę „Miasta” zawierającą: id, nazwę miasta, klucz obcy do tabeli regions.
  2. Załóż klucz główny na pole id tabeli „Miasta”.
  3. Załóż klucz unikalny na pole z nazwą miasta.
  4. Dodaj do tabeli „Miasta” pole „dzielnica”
  5. 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.

5 komentarzy:

  1. 1. CREATE TABLE City
    ( 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

    OdpowiedzUsuń
    Odpowiedzi
    1. create table miasta2(
      id_miasta numeric not null,
      nazwa_miasta numeric not null,
      constraint klucz_region
      foreign key (id_miasta)
      references regions(REGION_ID));

      Usuń
  2. 1.create table miasta(
    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);

    OdpowiedzUsuń
  3. Mam pytanie, czy indexy usuwają się wraz z usunięciem tabeli?

    OdpowiedzUsuń
  4. create table cities(
    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);

    OdpowiedzUsuń