Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Proste zapytanie prosta optymalizacja :)
little_MASTER
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 8.12.2008

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


Witam wszystkich!
Mam malutki problem odnośnie zapytania.
Otóż mam zapytanko:
  1. SELECT r.reg_nazwa AS region, w.woj_nazwa, o.typ, o.nazwa, o.ulica, o.kod, o.miasto, o.email, o.telefon, o.www, o.opis, o.notatki, o.cenaszkolenia, o.zdjecie FROM osoby o LEFT JOIN regiony r ON o.reg_id=r.reg_id LEFT JOIN wojewodztwa w ON o.woj_id = w.woj_id WHERE wew_id='E000001'

Które wybiera jakieś tam szczegóły z tabeli osoby, a że region jest jako id to wypadałoby pobrać nazwę z innej tabeli, podobnie dla województw.
Ogółem zapytanie działa (IMG:style_emoticons/default/smile.gif)

Ale...
To jedno zapytanie dla jak na razie 100 rekordów w tabeli osoby wykonuje się w 0,0006 sekundy (czyli dość szybko w/g mnie).

Tylko zastanawiam się jak to coś zoptymalizować, tzn same zapytanie, czy muszę robić dwa razy JOIN i czy koniecznie musi być LEFT, może jakiś inny.

A tak na marginesie czy w przypadku takich zapytań ma znaczenie jak ustawiłem indexy?

Dla tabeli osoby mam jako indexy: wew_id jako primary, reg_id i woj_id jako pomocnicze.

W razie potrzeby przedstawię strukturę wizualnie, choć wydaje mi się że jest ona dość zrozumiała (IMG:style_emoticons/default/smile.gif)

Prosiłbym o pomoc, wykładowca dość poważnie ocenia optymalizację zapytań, a chciałbym to jakoś spokojnie zaliczyć (IMG:style_emoticons/default/tongue.gif)

Z góry dzięki za pomoc.

//EDIT
Stworzyłem jeszcze takie zapytanko:
  1. SELECT r.reg_nazwa AS region, w.woj_nazwa, o.typ, o.nazwa, o.ulica, o.kod, o.miasto, o.email, o.telefon, o.www, o.opis, o.notatki, o.cenaszkolenia, o.zdjecie FROM osoby o, regiony r, wojewodztwa w WHERE o.reg_id=r.reg_id AND o.woj_id = w.woj_id AND wew_id='E000001'

I teraz kolejne pytanie: które z tych dwóch jest lepsze? Które w przypadku dużej ilości rekordów będzie lepsze?

Wiem że mogę wygenerować 100tys albo i więcej rekordów i to sprawdzić, ale jednak wolałbym poradzić się doświadczonych koderów najpierw (IMG:style_emoticons/default/wink.gif)

Ten post edytował little_MASTER 25.10.2011, 11:37:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
little_MASTER
post
Post #2





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 8.12.2008

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


(IMG:http://img835.imageshack.us/img835/3771/screen1bx.jpg)
Tak wygląda tabelka z profilowania.
Czy korzysta w index'ów nie wiem :/
Prosiłbym o interpretację (IMG:style_emoticons/default/smile.gif)

Kiedy pierwszy raz wykonałem zapytanie trwało ono 0,0026s, za drugim i kolejnym razem 0,0006s.
Czy to normalne? MySQL sam cache'uje wyniki zapytań?

A i jeszcze jedno (tylko nie krzyczcie za bardzo):
W bazie mam relacje n do n tzn jedna osoba może należeć do wielu typów.
Mam tabele osoba i tabelę typ i pomiędzy nimi była tabela osoba_typ która przechowywała id_osoba i id_typ

Pominąłem to dodając pole typ które przechowuje połączone kropką typy.
Np jeżeli coś było typu 1,2 i 5 to w polu typ mam 1.2.5.
W php robię implode a przy odczycie explode.

Wszystko śmiga aż miło (IMG:style_emoticons/default/smile.gif)

Ale co jeśli będę chciał robić wybieranie po typie? Zostaje mi tylko like, a to przy dużych ilościach rekordów zabija bazę :/ (poprawcie mnie jeśli się mylę)

Czy to co zrobiłem było słuszne? Tzn czy tak się powinno robić? Muszę mieć jakąś linię obrony dla wykładowcy (IMG:style_emoticons/default/smile.gif)

Ten post edytował little_MASTER 25.10.2011, 11:52:51
Go to the top of the page
+Quote Post

Posty w temacie
- little_MASTER   Proste zapytanie prosta optymalizacja :)   25.10.2011, 11:30:14
- - nospor   Same joiny masz zrobione poprawnie. Co do indeksów...   25.10.2011, 11:36:40
- - luckyps   Cytat(little_MASTER @ 25.10.2011, 12:30...   25.10.2011, 11:41:45
- - little_MASTER   Tak wygląda tabelka z profilowania. Czy korzysta w...   25.10.2011, 11:42:21
- - nospor   Prosiłem o EXPLAIN a nie ok profilowanie   25.10.2011, 11:48:15
|- - little_MASTER   Cytat(nospor @ 25.10.2011, 12:48:15 )...   25.10.2011, 11:58:44
- - nospor   No i już widzisz które lepsze Jedno pobiera 1 rek...   25.10.2011, 12:03:10
- - luckyps   Cytat(little_MASTER @ 25.10.2011, 12:42...   25.10.2011, 12:04:51
|- - little_MASTER   Cytat(luckyps @ 25.10.2011, 13:04:51 ...   25.10.2011, 12:31:01
- - nospor   Co to za typy, ile ich będziesz miał, czy one są d...   25.10.2011, 12:38:27
- - little_MASTER   Typy to tak jakby kategorie, tzn osoba może być le...   25.10.2011, 13:47:19
- - nospor   To musisz dodać tabelę łączącą osobę z typem: osob...   25.10.2011, 13:49:15
|- - little_MASTER   Cytat(nospor @ 25.10.2011, 14:49:15 )...   25.10.2011, 14:55:27
- - piotr.kazmierczak   Ogólnie jeżeli zależy Ci na prędkości działania ba...   25.10.2011, 15:51:47
- - little_MASTER   Wszystko jest w tabeli użytkownicy, jedyne co potr...   25.10.2011, 18:33:52
- - piotr.kazmierczak   Jeżeli to na jakieś zaliczenie to pomiń moją propo...   25.10.2011, 22:32:18
- - little_MASTER   Cytat(piotr.kazmierczak @ 25.10.2011, 23...   26.10.2011, 09:49:37


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: 6.10.2025 - 16:14