![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Moderatorzy Postów: 36 557 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]:
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 00:08 |