Wątek zablokowany 2011-09-02 20:30 przez madmike.

Indeks UNIQUE na wszystkich kolumnach

0

Załóżmy, że mamy jakąś tabelę w bazie z dziesięcioma kolumnami i tabela posiada np 3 miliony rekordów. Załóżmy na wszystkie kolumny indeks UNIQUE. Czy to rozwiązanie jest dobre? Co z szybkością wykonywania się zapytań SELECT,UPDATE,DELETE ?

0
kadoel napisał(a)

Czy to rozwiązanie jest dobre?

zależy

Co z szybkością wykonywania się zapytań SELECT,

zależy zależy, chociaż w większości przypadków wzrośnie

UPDATE

zależy zależy, chociaż w większości przypadków zmaleje

DELETE ?

zależy zależy, chociaż w większości przypadków wzrośnie

0

Spodziewałem się bardziej profesjonalnej odpowiedzi.

0

Szybkość SELECT wzrośnie, UPDATE i DELETE spadnie.

0

Kiedy warto stosować UNIQUE, a kiedy zwykłe indeksy. Jak mam tabelę z kluczem głównym i dwoma obcymi to warto na te klucze tworzyć UNIQUE.

0

wtedy, kiedy założenia biznesowe tego wymagają

0

@kadoel - Działanie indeksu UNIQUE zależy od tego czy masz w tabeli PRIMARY KEY czy nie. InnoDB w przypadku braku PRIMARY KEY tworzy z pierwszego indeksu UNIQUE indeks klastrowany, który znacznie przyspiesza operacje używające indeksu. Z reguły PRIMARY KEY zakłada się na pole id AUTO_INCREMENT i w takim przypadku szybkość działania UNIQUE nie odbiega od zwykłego indeksu zakładając, że chodzi o dokładnie te same dane. UNIQUE za to wymusza unikalność pól na których jest założony.

Zakładanie indeksu na PRIMARY KEY oraz na FOREIGN KEY jest bez sensu. InnoDB do każdego indeksu dokłada PK, więc nie ma w ogóle potrzeby uwzględniania go w polach indeksu, poza tym dane na dysku już są ułożone w kolejności PK, więc indeks z pierwszym polem PK nic nie przyspieszy.

Indeksy zakłada się na pola, które są wykorzystywane w zapytaniach. Z kolei zapytania dostosowuje się do możliwych indeksów. Wygląd tabel i indeksów oraz samych zapytań powinien być kompromisem. Z tego powodu nie można podać uniwersalnej zasady zakładania indeksu, wszystko zależy od konkretnego przypadku.

0

Nie wiem dlaczego bierzesz pod uwagę akurat InnoDb. Może, że jest popularny, ze względu na MySQL, którego jakoś nie lubię ;p.
http://kadoel-kawaczyjava.blo[...]lowanie-danych-z-uzyciem.html tu masz przykład pewnej bazy, powiedz mi na jakie kolumny w tej bazie założyłbyś UNIQUE'A . Wie ktoś gdzie można znaleźć dobry artykuł dotyczący indeksów w szczególności UIQUE z jakimiś przykłdami gdzie jest prosto wyjaśnione kiedy używać UNIQUE i po co .

0

napiszę to dużymi bo widać, że nie łapiesz INDEX UNIQUE ZAKŁADA SIĘ NA KOLUMNY KTÓRE MUSZĄ BYĆ UNIKALNE koniec i kropka. Primary Key jest z założenia unikalny i not null. Dotarło, zrozumiał.
Powiedz mi jak pozakładasz UNIQUE na wszystkich kolumnach to jak dodasz np. dwóch studentów z takim samym wiekiem albo imieniem? Wystarczy mieć odrobinę oleju w głowie i troszeczkę pomyśleć aby stwierdzić, że "Załóżmy na wszystkie kolumny indeks UNIQUE" jest po prostu poronionym pomysłem, tak samo jak "Załóżmy na wszystkie kolumny indeks".

I na koniec to co już napisałem i Adam też - indeksy zakłada się pod konkretne zapytania ze zwróceniem uwagi na fakt, że każdy indeks zwalnia operację dodawania nowego rekordu.

AdamPL napisał(a)

Zakładanie indeksu na PRIMARY KEY oraz na FOREIGN KEY jest bez sensu.

generalnie zakładanie indeksu dla samego faktu jego założenia, bez odzwierciedlenia tego w fizycznym przyśpieszeniu operacji (w szczególności wyszukiwania) na bazie jest bez sensu

0

napiszę to dużymi bo widać, że nie łapiesz INDEX UNIQUE ZAKŁADA SIĘ NA KOLUMNY KTÓRE MUSZĄ BYĆ UNIKALNE koniec i kropka. Primary Key jest z założenia unikalny i not null. Dotarło, zrozumiał.
Powiedz mi jak pozakładasz UNIQUE na wszystkich kolumnach to jak dodasz np. dwóch studentów z takim samym wiekiem albo imieniem? Wystarczy mieć odrobinę oleju w głowie i troszeczkę pomyśleć aby stwierdzić, że "Załóżmy na wszystkie kolumny indeks UNIQUE" jest po prostu poronionym pomysłem, tak samo jak "Załóżmy na wszystkie kolumny indeks".

I na koniec to co już napisałem i Adam też - indeksy zakłada się pod konkretne zapytania ze zwróceniem uwagi na fakt, że każdy indeks zwalnia operację dodawania nowego rekordu.

Chłopaczku nie pozwalaj sobie za dużo z tą ironiczną wypowiedzią. Napisałem posta i chciałem się dowiedzieć jaka jest odpowiedź, a nie dostać wypowiedź zakompleksionego gościa, który pewnie nie ma kolegów. Na mojej uczelni był na pewno wyższy poziom nauczania z baz danych. Nigdy nie korzystałem z UNIQUE i chciałem się o to spytać dlatego, że dostałem takie pytanie na rozmowie kwalifikacyjnej.

Jak uważasz się za specjalistę od baz to rozwiąż te kolokwium:

http://imageshack.us/photo/my-images/217/kolokwiumbd.jpg
http://imageshack.us/photo/my-images/89/modelkonc.jpg
http://imageshack.us/photo/my-images/191/zalicz1.jpg

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