poxrimex
13.02.2008, 18:50:19
Chciałbym się dowiedzieć co to indeksy w mysql, do czego służą i jakieś przykłady.
Nie będę wybrzydzać jak ktoś poda również linka do jakieś strony z tutorialem, lecz
po polsku.
Pozdrawiam
Danone
13.02.2008, 18:55:04
Proszę Cie bardzo o to materiały o które prosiłeś
http://republika.onet.pl/20405,16688,5,10,kursy.htmli tutaj obszerniej:
http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html"Indeksy są wykorzystywane do szybkiego odnajdywania rzędów z wyspecyfikowanymi wartościami kolumn."
ps. google nie zabija
phpion
13.02.2008, 18:55:26
Coś szukanie idzie ci bardzo opornie...
W skrócie: indeksy w bazie danych można porównać do indeksu w książce. Bez indeksu szukając jakiegoś tematu musiałbyś przelatywać cały spis treści lub nawet całą książkę, natomiast mając na końcu książki indeks możesz do niego zajrzeć i od razu uzyskać numery stron, na których jest interesujący cię temat.
Indeksy znacznie przyspieszają wyszukiwanie, natomiast spowalniają modyfikowanie zawartości bazy danych (dochodzi aktualizacja indeksów). Ponadto zajmują dodatkowe miejsce na dysku. Coś za coś.
poxrimex
13.02.2008, 19:05:18
no tak, ale jak mam tabelę użytkownicy
LOGIN HASŁO MOTTO ŻYCIOWE DATA URODZENIA
i dam index dla loginu, to już login jest indexem
i można powiedzieć, ze w tabeli są indexy?
zakręcony
13.02.2008, 19:08:25
mozna tak powiedzieć
phpion
13.02.2008, 19:23:31
Na login możesz nadać wręcz indeks unikalny (UNIQUE) - chyba, że dopuszczasz kilku użytkowników o tym samym loginie.
Cysiaczek
13.02.2008, 19:51:11
Zrób zapytanie z pięcioma left joinami na tabelach z kilku tysiącami rekordów, to zobaczysz, dlaczego zakłada się indeksy na pola relacyjne.
Niedawno się głowiłem, dlaczego zapytane leci 12 sekund :| Założyłem 5 indeksów i trwa 0.02 sekundy

Pozdrawiam
poxrimex
13.02.2008, 20:09:32
właśnie przeczytałem o indeksach, wiem jak indeksować
ale co tylko zaznaczam w mysql daną kolumnę jako indeks
i poźniej to ułatwia jak jest wyszukiwanie where=indeks
dobrze rozumuje?
A czy takie tworzenie tabeli jest poprawne. tzn będzie
szybko wyszukiwało po nazwach użytkowników?
CREATE TABLE `hosting`.`uzytkownicy` (
`login` VARCHAR( 16 ) NOT NULL ,
`haslo` CHAR( 40 ) NOT NULL ,
PRIMARY KEY ( `login` )
) ENGINE = MYISAM
Vexator
13.02.2008, 20:15:52
indeksy lepiej rób liczbowe... czemu?
załóżmy, że masz taką tabelę:
imię, nazwisko, ojciec
jan, nowak, krzysztof nowak
krzysztof, Nowak, ...
i drugą
ID, imie, nazwisko, ojciec
1, jan, nowak, 2
2, krzysztof, nowak, NULL
jak w pierwszej chcesz wyświetlić dane ojca? musisz dzielić pole ojciec na imie i nazwisko, które ktoś mógł napisać odwrotnie, w których mógł użyć lub nie, wielkich liter.
w drugim przypadku po prostu wyświetlasz wpis nr 2
poxrimex
13.02.2008, 20:19:42
no ale ja chciałbym żeby było login? też może być?
a kolumnie login nie dałem index tylko klucz podstawowy to takie coś poprawne jest?
phpion
13.02.2008, 21:09:10
Na klucz główny automatycznie nadawany jest indeks (bodajże nawet unikalny) więc nie ma potrzeby (lub wręcz się tego nie sugeruje) ręcznego nadawania danej kolumnie indeksu.
poxrimex
13.02.2008, 21:24:05
to jak mam tabelę
LOGIN HASŁO WIEK ILOSC DZIECI PRACA ADRES TELEFON
to dać jako klucz standartowy LOGIN najlepiej?
phpion
13.02.2008, 21:27:27
Nie. Najlepiej zawsze tworzyć identyfikatory rekordu jako liczby. Dlaczego? Indeksy liczbowe są zawsze szybsze niż alfanumeryczne, poza tym w przypadku zmiany wartości pola (w tym przypadku loginu) mogą ci się posypać powiązania z innymi tabelami. Lepiej do każdej (prawie) tabeli dodawać pole "id".
poxrimex
13.02.2008, 21:34:04
no tak, ale jak użytkownik mi się zaloguj wg loginu
to też trochę czasu zejdzie zanim skrypt znajdzie
do którego loginu jest przypisane dane id nie?
phpion
13.02.2008, 21:39:42
W takim razie rób jak chcesz. Zadałeś pytanie, udzieliłem ci odpowiedzi. Moim skromnym zdaniem zasugerowane przeze mnie rozwiązanie jest najlepsze. Jeśli masz inne zdanie na ten temat - rób jak uważasz.
poxrimex
13.02.2008, 21:41:00
nie, nie o to chodzi
tylko się pytam
jak to będzie wyglądało
jak użytkownik się zaloguje wg loginu
i skrypt ma w jaki sposób przeszukać jaki login ma id?
Cysiaczek
13.02.2008, 21:42:32
Oczywiście, że musi być id - każda tabela powinna mieć główny index - unikalny. Jest nim zawsze pole integer.
poxrimex
13.02.2008, 21:49:34
ja wiem że musi być
tylko jak mam wówczas zrobić
żeby szybko, a nie jak sam mówiłeś
w 12 sekund, Odczytało jaki dany login ma
id, czyli index.
Cysiaczek
13.02.2008, 21:52:36
Przecież jak logujesz użytkownika to pobierasz jego rekord z bazy, prawda? Pobierasz zatem również pole ID - nie rozumiem Twoich rozterek.
Pozdrawiam.
webdice
13.02.2008, 21:58:31
Ideą stosowania index'ow jest przyspieszenie wyszukiwania danych i zazwyczaj indexy zakłada się dla pól które używasz w klauzuli WHERE, ORDER BY, ale to też nie jest z góry powiedziane, zależne jest to od wielu czynników i nie da się tu utworzyć reguły.
poxrimex
13.02.2008, 22:13:04
Przypuśćmy że jest tabela mysql
NUMER LOGIN HASŁO
i użytkownik zawsze wpisuje login oraz hasło
to co ma być kluczem podstawowym?
DRUGA SPRAWA, jakim cudem na wielu
portalach wyszukiwarki bardzo szybko wyszukują
np tematy? Skoro było mówione że bez
indeksów 4 tys wierszów 12 sekund było odczytywane
a na forach jest więcej tego i dużo szybciej
phpion
13.02.2008, 22:19:17
Cytat(poxrimex @ 14.02.2008, 00:13:04 )

jakim cudem na wielu
portalach wyszukiwarki bardzo szybko wyszukują
np tematy?
Dlatego, że mają pozakładane indeksy na odpowiednie pola w tabelach.
webdice
13.02.2008, 22:22:41
Cytat(poxrimex @ 13.02.2008, 22:13:04 )

Przypuśćmy że jest tabela mysql
NUMER LOGIN HASŁO
i użytkownik zawsze wpisuje login oraz hasło
to co ma być kluczem podstawowym?
DRUGA SPRAWA, jakim cudem na wielu
portalach wyszukiwarki bardzo szybko wyszukują
np tematy? Skoro było mówione że bez
indeksów 4 tys wierszów 12 sekund było odczytywane
a na forach jest więcej tego i dużo szybciej
Jesteś człowieku nie możliwy, pytasz o rzeczy które został napisane po kilka razy w tym samym temacie. Czy Tobie trzeba tłumaczyć na przykładnie każdej tabeli i każdego pola na co masz założyć index? Wez zrób sobie testy, popróbuj, to nie boli, a nauczysz się tego szybciej, bo tak jak mówiłem nie ma reguły która mówi na które pola zakłada się index'y,
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.