![]() |
![]() |
![]()
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]:
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Jak rozumiem przy zakładaniu wiadomości użytkownik wybiera do jakich użytkowników jest kierowana wiadomość, nie dyskutuję, bo to funkcjonalność, widocznie tak ma być Tak, tak ma byc (IMG:style_emoticons/default/smile.gif) ad1) Bawiłem się już i taką kombinacją - nic to nie dało ad2) Zrobiłem to celowo. Dzięki mojemu zastosowaniu unikam duplikacji głównego rekordu, przy kilku wpisach w tabeli wiążącej dla danej wiadomości ad3) No niestety nic to nie dało. Mało tego, to rozwiązanie jest jeszcze gorsze, gdy zmula zapytanie nawet wówczas gdy wawalę z OR ten pierwszy warunek na FK_CUSER. Gdy zostawię joina zamiast EXISTS, to po wywaleniu FK_CUSER z OR zapytanie śmiga jak ta lala. Kombinuj dalej. Chętnie wysłucham jeszcze jakiś propozycji. Szczerze powiedziawszy gdy pokazałeś EXISTS to już miałem cień nadziei że zadziała. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 16:35 |