Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [mysql] Indeksy
poxrimex
post 13.02.2008, 18:50:19
Post #1





Grupa: Zarejestrowani
Postów: 368
Pomógł: 2
Dołączył: 23.09.2007

Ostrzeżenie: (60%)
XXX--


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


--------------------



Go to the top of the page
+Quote Post
Danone
post 13.02.2008, 18:55:04
Post #2





Grupa: Zarejestrowani
Postów: 169
Pomógł: 16
Dołączył: 18.10.2006
Skąd: Olsztyn/Wrocław

Ostrzeżenie: (0%)
-----


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

Ten post edytował Danone 13.02.2008, 18:58:31
Go to the top of the page
+Quote Post
phpion
post 13.02.2008, 18:55:26
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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ś.
Go to the top of the page
+Quote Post
poxrimex
post 13.02.2008, 19:05:18
Post #4





Grupa: Zarejestrowani
Postów: 368
Pomógł: 2
Dołączył: 23.09.2007

Ostrzeżenie: (60%)
XXX--


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?


--------------------



Go to the top of the page
+Quote Post
zakręcony
post 13.02.2008, 19:08:25
Post #5





Grupa: Zarejestrowani
Postów: 107
Pomógł: 10
Dołączył: 26.09.2007

Ostrzeżenie: (0%)
-----


mozna tak powiedzieć


--------------------
Rachunkowość w biurze we Wrocławiu: biuro rachunkowe wrocław, miejca parkingowe przy Okęciu parking Okecie.
Go to the top of the page
+Quote Post
phpion
post 13.02.2008, 19:23:31
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Na login możesz nadać wręcz indeks unikalny (UNIQUE) - chyba, że dopuszczasz kilku użytkowników o tym samym loginie.
Go to the top of the page
+Quote Post
Cysiaczek
post 13.02.2008, 19:51:11
Post #7





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
poxrimex
post 13.02.2008, 20:09:32
Post #8





Grupa: Zarejestrowani
Postów: 368
Pomógł: 2
Dołączył: 23.09.2007

Ostrzeżenie: (60%)
XXX--


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


--------------------



Go to the top of the page
+Quote Post
Vexator
post 13.02.2008, 20:15:52
Post #9





Grupa: Zarejestrowani
Postów: 32
Pomógł: 6
Dołączył: 28.08.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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


--------------------
Pomogłem? Kliknij "pomógł" ;)
Go to the top of the page
+Quote Post
poxrimex
post 13.02.2008, 20:19:42
Post #10





Grupa: Zarejestrowani
Postów: 368
Pomógł: 2
Dołączył: 23.09.2007

Ostrzeżenie: (60%)
XXX--


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?


--------------------



Go to the top of the page
+Quote Post
phpion
post 13.02.2008, 21:09:10
Post #11





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
poxrimex
post 13.02.2008, 21:24:05
Post #12





Grupa: Zarejestrowani
Postów: 368
Pomógł: 2
Dołączył: 23.09.2007

Ostrzeżenie: (60%)
XXX--


to jak mam tabelę

LOGIN HASŁO WIEK ILOSC DZIECI PRACA ADRES TELEFON

to dać jako klucz standartowy LOGIN najlepiej?


--------------------



Go to the top of the page
+Quote Post
phpion
post 13.02.2008, 21:27:27
Post #13





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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".
Go to the top of the page
+Quote Post
poxrimex
post 13.02.2008, 21:34:04
Post #14





Grupa: Zarejestrowani
Postów: 368
Pomógł: 2
Dołączył: 23.09.2007

Ostrzeżenie: (60%)
XXX--


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?


--------------------



Go to the top of the page
+Quote Post
phpion
post 13.02.2008, 21:39:42
Post #15





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
poxrimex
post 13.02.2008, 21:41:00
Post #16





Grupa: Zarejestrowani
Postów: 368
Pomógł: 2
Dołączył: 23.09.2007

Ostrzeżenie: (60%)
XXX--


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?


--------------------



Go to the top of the page
+Quote Post
Cysiaczek
post 13.02.2008, 21:42:32
Post #17





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Oczywiście, że musi być id - każda tabela powinna mieć główny index - unikalny. Jest nim zawsze pole integer.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
poxrimex
post 13.02.2008, 21:49:34
Post #18





Grupa: Zarejestrowani
Postów: 368
Pomógł: 2
Dołączył: 23.09.2007

Ostrzeżenie: (60%)
XXX--


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.


--------------------



Go to the top of the page
+Quote Post
Cysiaczek
post 13.02.2008, 21:52:36
Post #19





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Przecież jak logujesz użytkownika to pobierasz jego rekord z bazy, prawda? Pobierasz zatem również pole ID - nie rozumiem Twoich rozterek.

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
webdice
post 13.02.2008, 21:58:31
Post #20


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 15:01