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.blogspot.com/2011/08/modelowanie-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

0

Synku za wiedzę się płaci a jak nie potrafisz kolokwium rozwiązać (bo pewnie nikt nie tłumaczył, bo fajniej było iść na piwko (i poznawać nowych kolegów - niech oni ci teraz pomagają1) niż się przyłożyć, itd, itp, jaki ty biedny jesteś) to możesz zapłacić komuś, i wcale nie mi.
Inna sprawa, że jeśli po każdej odpowiedzi pytasz o to samo to oznacza, że nie jesteś w stanie przyswoić odpowiedzi i tyle. Może jednak informatyka nie jest dla ciebie.
Swoją drogą po wpisaniu do googla indeks unikalny już w drugim wyniku masz opisane po co i dlaczego indeksy. Ale ty jesteś przecież pro student - nie będziesz się zniżał i używał googla...

1- tak, to była ironia a osobiste wycieczki to sobie możesz darować bo ja też potrafię tylko po co

EDIT:

Czy to rozwiązanie jest dobre?

Nigdy nie korzystałem z UNIQUE i chciałem się o to spytać dlatego, że dostałem takie pytanie na rozmowie kwalifikacyjnej.

jedyna sensowna odpowiedź na takie pytanie to (uwaga, to słowo pogrubione będzie tą właśnie odpowiedzią) zależy. Nie da się odpowiedzieć TAK/NIE - to tak nie działa. To jest takie samo pytanie jak np. "Czy jeśli pomaluję garnek na zielono to będzie to dobre rozwiązanie?" - umiesz na nie odpowiedzieć TAK/NIE? prościej tego wytłumaczyć nie potrafię
Mam nadzieję, że chociaż to zrozumiałeś i rozwiałem twoje wątpliwości odnośnie pierwszego pytania.

0

Pytanie było, odpowiedź była - zaczynają się głupie zaczepki. Temat w takim razie blokuję.

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