Rodzaje indeksów

0

Zakładając, że mamy daną następująca tablę: Create table pacjent(id)pacjenta number(4) primary key, imię varchar2(20) not null, naziwsko varchar2(30) not null, miejscowośd varchar2(15), ulica varchar2(15), id_oddzialu number(4) references oddzial), napisad jakie indeksy powinny byd założone dla podanych niżej zapytao (podad rodzaj indeksu, klucz wyszukiwania oraz wygląd pozycji danych):
A. Select id_pacjenta, imię, nazwisko from pacjent Where miejscowo=’Białystok’;
B. Select id_oddzialu, Mount(*) from pacjent Group by id_oddzialu;
C. Select id_oddzialu from pacjent Where imię=’Anna’ and nazwisko=’Nowak’;

Czy jest ktoś w stanie wytłumaczyć mi jak powinno dobrać się indeksy w tych wypadkach ?

0

A. Indeks na miejscowość bo chciałbyś jak najszybciej wyszukać wszystkie rekordy z miejscowością X. Dzięki takiemu indeksowi możesz wyciągnąć takie rekordy bez konieczności skanowania całej bazy
B. nie wiem co to jest Mount
C. Indeksy na imie i nazwisko tak samo jak w A

0

Tyle że tutaj jeszcze muszę podać rodzaj indeksu do każdego i z tym mam największy problem z doborem ich.
• Indeks główny lub podstawowy
• Indeks zgrupowany (clustering index)
• Indeks wtórny (secondary index)

Tam miało być Count() zamiast Mount().

1

w B masz indeks clustering, w A i C masz raczej secondary bo primary z automatu leci ci na klucze. Primary jest zgodny z fizycznym ułożeniem danych na dysku.

0

Fizyczne położenie na dysku danych w tabeli nie jest zależne od PK, przykład:

SQL Server

Tworzenie Primary Key (http://msdn.microsoft.com/en-us/library/ms181043(v=sql.105).aspx)

Konkretnie zapis:

The Database Engine automatically creates a unique index to enforce the uniqueness requirement of the PRIMARY KEY constraint. If a clustered index does not already exist on the table or a nonclustered index is not explicitly specified, a unique, clustered index is created to enforce the PRIMARY KEY constraint.

Czyli w momencie tworzenia PK jeżeli dosłownie nie zdefiniujemy klucza niegrupujacego i nie będzie jeszcze takiego na tabeli, domyślnie będzie grupującym, czyli sortuje całą tabelę (układa rekordy na stronach danych należących do tabeli), w uproszczeniu odpowiada "polozeniu fizycznym danych" co wynika stąd:

The data rows are stored in order based on the clustered index key. The clustered index is implemented as a B-tree index structure that supports fast retrieval of the rows, based on their clustered index key values. The pages in each level of the index, including the data pages in the leaf level, are linked in a doubly-linked list. However, navigation from one level to another is performed by using key values

źródło: http://msdn.microsoft.com/en-us/library/ms189051(v=sql.105).aspx

ORACLE

Przechowywanie danych dla tabel o indeksach grupujacych i nie grupujacych:
http://docs.oracle.com/cd/B28359_01/server.111/b28318/schema.htm#sthref759

Reasumując faktycznie to decyduje silnik jak fizycznie układa te dane więc taki opis, ze coś jest tak przechowywane jest w dużej mierze uproszczeniem, zbyt dużo czynnikow na to wpływa....

1 użytkowników online, w tym zalogowanych: 0, gości: 1