Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL]phpmyadmin - indeksy dla tablic - jakie?
konrados
post
Post #1





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


Witam,

Ogółem niby wiem co to są indeksy (klucze) ale gubię się, gdy chodzi o tworzenie indeksów dla wielu pól jednocześnie.

Mam pierwszą tabelę, gdzie trzymam "użytkowników", jest tam id,user_name itd.

Mam drugą tabelę, gdzie trzymam "wiadomości użytkowników", jest tam id, oraz: sender_id oraz recipient_id (które dotyczą id w pierwszej tabeli) itd... Czyli taki typowy przykład bardzo prostej relacji.

Chodzi mi (na razie) o tę drugą tabelę. Chcę tam stworzyć indeksy (używając phpMyAdmin) i chciałbym indeksować: id, sender_id oraz recipient_id (chyba słusznie?). I teraz: czy mam stworzyć JEDEN indeks zawierający wszystkie te kolumny, czy stworzyć 3 indeksy dla każdej z nich? Czy jest jakaś różnica potem w szybkościach?

p.s. Co to jest "MOC" w phpmyadmin przy indeksach? Google nie chce pomóc.

p.s.2 w tej pierwszej tabeli (gdzie jest min. user_name:varchar [64]) warto indeksować ów "user_name"? A jeśli tak to w jednym indeksie z ID czy w dwóch indeksach?

Update: w związku z brakiem odpowiedzi, potestowałem trochę, dodając różne indeksy dla różnych pól, no i ... zero różnicy, czas wykonania taki sam, może kilkanaście tysięcy rekordów to za mało by indeksowanie coś pomagało?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


1. Indeksy dodajesz w zaleznosci jak korzystasz z danych

http://stronka/user/konrados => SELECT * FROM users WHERE user.name = 'konrados'
-> zakladasz index na user_name, w dodatku UNIQUE; nie robisz lacznego indeksu z ID bo po co?
popatrz potem co ci EXPLAIN pokaze, ktorego indeksu uzyje

2. Wiadomosci od userow?
- otrzymane wiadomosci
SELECT * FROM messages WHERE recipient_id = $twoj_user_id
- wyslane wiadomosci
SELECT * FROM messages WHERE sender_id = $twoj_user_id
- pokaz wiadomosc 123
SELECT * FROM messages WHERE id = 123

czyli 3 klucze, pojedyncze, na kazda z kolumn z osobna. index na 'id' powinien ci PRIMARY KEY juz zalatwic - nie musisz go dodawac osobno.
Jeden potrojny klucz jest bez sensu, przyda ci sie TYLKO gdy bedziesz wyszukiwal: ...WHERE recipient_id = $id1 AND sender_id = $id2 AND id = $id3 - a tak zapewne nie bedziesz z tego korzystal


3. Moc - 'Cardinality', ilosc roznych wartosci dla danego indexa, im wiecej roznych wartosci/ilosc rekordow tym indeks bardziej sie przydaje.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 00:46