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

Indeks UNIQUE na wszystkich kolumnach

2011-09-02 15:43
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 ?


szczególnie jeśli jedno z tych pól to np. płeć - i wymyśl teraz 3 miliony różnych określeń płci... - Misiekd 2011-09-02 16:16

Pozostało 580 znaków

2011-09-02 15:51
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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-09-02 15:55
0

Spodziewałem się bardziej profesjonalnej odpowiedzi.


czyli jakiej bo nie rozumiem. Myślisz że to jest tak, że zawsze 2+2=4??? Tu nie ma jasnej odpowiedzi - może spadnie a może nie. BTW indeksów nie zakłada się od tak bo mi się podobają. Są pewne zasady, których trzeba przestrzegać. Ale przede wszystkim czy indeks jest dobry i czy jest potrzebny czy nie można powiedzieć dopiero jak baza ma parę mln rekordów i można pooglądać sobie plany wykonania dla różnych zapytań - Misiekd 2011-09-02 16:15

Pozostało 580 znaków

2011-09-02 16:00
0

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

pod warunkiem, że selecty będą używały indeksów. Dlaczego niby delete ma spaść? - przeca to jedynie proste oznaczenie rekordu i indeksów jako usunięte (a jak się wstrzeli warunkiem w indeks to wręcz wzrośnie), nie to co INSERT czy UPDATE - Misiekd 2011-09-02 16:12
Np. w MySQL nie ma obsługi "index hint" dla DELETE, a to powoduje, że wiele zapytań DELETE może nie korzystać z indeksu lub nie z tego co trzeba. DELETE powoduje konieczność update-u indeksu, co powoduje narzut na całą operację. DELETE powoduje fragmentację indeksów, które nie przebudowywane przestaną z czasem spełniać swoją rolę. - AdamPL 2011-09-02 16:29

Pozostało 580 znaków

2011-09-02 16:09
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.


Pozostało 580 znaków

2011-09-02 16:12
0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2011-09-02 17:05
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.

Pozostało 580 znaków

2011-09-02 17:41
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 .


Pozostało 580 znaków

2011-09-02 17:57
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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
edytowany 1x, ostatnio: Misiekd, 2011-09-02 18:02

Pozostało 580 znaków

2011-09-02 19:29
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


edytowany 1x, ostatnio: kadoel, 2011-09-02 19:30

Pozostało 580 znaków

2011-09-02 20:06
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.


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
edytowany 1x, ostatnio: Misiekd, 2011-09-02 20:12
hahahaha nie zrobiło to na mnie wrażenia jak bym Cię spotkał osobiście to byś .... dostał wpierdol. Po drugie lepiej mieć kolegów niż wiele relacji w bazie. Wolę relacje międzyludzkie . Ty siedzisz pewnie sam nocami nawet nie potrafisz ogarnąć sobie kobiety i grzebiesz w komputerze. Jedynie co wiesz to jaka nowa koszula flanelowa wyszła na rynku. - kadoel 2011-09-02 20:11
masz rację - siedzę we własnym domu, oglądam Duval i Moretti w HD na moim wypasionym 52'' TV, w tle leci sobie relaksująca muzyka, której słucha sobie moja żona. Do pracy, którą lubię i która jest też moim hobby jeżdżę sobie własnym samochodem, na który mnie stać... No ale przecież na kasie w realu też ktoś musi pracować - nadasz się tam jak nic. 8 godzin w pielusze a potem cheja, hulaj dusza z "wieloma kolegami". Powodzenia w realnym życiu, gdzie rachunki nie płacą się same a zmartwienia skąd tu wziąć kasę na kolejne piwo nie istnieją... - Misiekd 2011-09-02 20:19
A co do tego wpierdolu to po pierwsze tym pokazałeś jaki kozak jest z ciebie. Po drugie masz lekko wypaczony obraz informatyka - czasy flanelowych koszul i wielkich okularków dawno przeminęły - teraz niejeden zrobiłby z ciebie kolejnego klienta SORu - Misiekd 2011-09-02 20:23

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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