![]() |
![]() |
![]()
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? |
|
|
![]() |
![]()
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 00:46 |