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
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




To musisz dodać tabelę łączącą osobę z typem:
osoba_typ
ID_OSOBA
ID_TYP

i wywalic to durne pole typ z osoby (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
little_MASTER
post
Post #3





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

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


Cytat(nospor @ 25.10.2011, 14:49:15 ) *
To musisz dodać tabelę łączącą osobę z typem:
osoba_typ
ID_OSOBA
ID_TYP

i wywalic to durne pole typ z osoby (IMG:style_emoticons/default/smile.gif)


Też tak myślałem, tzn miałem na początku tak zrobione (IMG:style_emoticons/default/smile.gif)
Całe szczęście jakaś kopia jest to przywrócę.

A da się jednym zapytaniem pobrać i informacje o osobie i typy? Ma to sens?
Czy dwoma zapytaniami?

Czyli jak mamy tabele:

Osoby
-----------------------
|id| imie|nazwisko|
|1|Tomek| xxx|
|2| Karol| xxx|

Typy
----------------
|id| nazwa|
|1| kierowca|
|2|nauczyciel|
...


Osoby_typy
---------------------
|id_osoby|id_typu|
| 1| 1|
| 2| 1|
| 2| 2|

O osobie pobieram tak jak wcześniej tzn po id.
A typy mogę pobrać tak:
  1. SELECT nazwa FROM Typy WHERE id IN (SELECT id_typu FROM Osoby_typy WHERE id_osoby='id_osoby')

Czy jakieś rozwiązanie byłoby lepsze?
Chodzi o to że osób będzie dużo, jak i typów i żeby przy zaliczeniu mi się to nie wysypało albo nie zamuliło :/

Dużo osób to np 100tys danych testowych :/
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: 9.10.2025 - 13:06