![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Mam takie tabele
Mamy tabelę wiadomości oraz tabelę wiążącą, która mówi, że tę wiadomość może zobaczyć taki a taki user. Wiadomość może też widziec ten, kto ją utworzył (FK_CUSER) No i mam zapytanie pobierające wiadomosci
Czyli pobieram wiadomosci jakie może widziec użytkownik 4 W bazie mam 500tys rekordów. Wszystko smiga do czasu dodania OR cmu.FK_USER IS NOT NULL czyli sprawdzeniu tabeli wiążącej. EXPLAIN daje: Kod id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE cm index FK_MESSAGE,FK_CUSER FK_LAST_MESSAGE 4 \N 35 Using where 1 SIMPLE cmu eq_ref PRIMARY PRIMARY 8 cm.ID,const 1 Using where; Using index Gdy dodam tego OR to zapytanie wykonuje się 2 sekundy. Idzie jakoś to przyspieszyc? Nie widzę za bardzo jakie mam tu dodać dodatkowe indeksy. Przed chwilą wpadłem na pomysł, że wystarczy iż zamienie cm.FK_CUSER = 4 OR cmu.FK_USER IS NOT NULL na cmu.FK_USER IS NOT NULL czyli wywale sprawdzanie autora wiadomosci, a autora dodam do tabeli wiążącej. Wówczas zapytanie znowu śmiga. Wolałbym jednak tego rozwiązania nie stosować.
Powód edycji: [nospor]:
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 158 Pomógł: 43 Dołączył: 9.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie za bardzo rozumiem
1. W zapytaniu używasz pól cm.CDATE, cm.COUNT_MESSAGES, a w definicji tabeli `message` brak takich pól. Zapytanie raczej nie powinno działać (IMG:style_emoticons/default/smile.gif) 2. Po co jest tabela `message_user`? Dane dotyczące identyfikatorów wiadomości i użytkownika są już w tabeli `message` |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 18:27 |