Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Indeksy
Forum PHP.pl > Forum > Przedszkole
poxrimex
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
Proszę Cie bardzo o to materiały o które prosiłeś smile.gif

http://republika.onet.pl/20405,16688,5,10,kursy.html

i 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
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
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
mozna tak powiedzieć
phpion
Na login możesz nadać wręcz indeks unikalny (UNIQUE) - chyba, że dopuszczasz kilku użytkowników o tym samym loginie.
Cysiaczek
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 snitch.gif

Pozdrawiam
poxrimex
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?
  1. CREATE TABLE `hosting`.`uzytkownicy` (
  2. `login` VARCHAR( 16 ) NOT NULL ,
  3. `haslo` CHAR( 40 ) NOT NULL ,
  4. PRIMARY KEY ( `login` )
  5. ) ENGINE = MYISAM
Vexator
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
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
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
to jak mam tabelę

LOGIN HASŁO WIEK ILOSC DZIECI PRACA ADRES TELEFON

to dać jako klucz standartowy LOGIN najlepiej?
phpion
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
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
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
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
Oczywiście, że musi być id - każda tabela powinna mieć główny index - unikalny. Jest nim zawsze pole integer.
poxrimex
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
Przecież jak logujesz użytkownika to pobierasz jego rekord z bazy, prawda? Pobierasz zatem również pole ID - nie rozumiem Twoich rozterek.

Pozdrawiam.
webdice
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
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
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.