hilpers


  hilpers > comp.* > comp.bazy-danych

 #1  
12.10.2005, 13:21
X t l a n
Cześć.


Przypuśćmy, że mam 3 tabele:
tab. a (np. 1000 rekordów):
- id (primary key)
- name (varchar unique)

tab. b (np. 1000 rekordów):
-id (primary key)
- surname (varchar unique)

tab. z (>100000 rekordów):
- id (primary key)
- name_id (mediumint)
- surname_id (mediumint)


Teraz chce je połączyć za pomocą join i piszę zapytanie:


SELECT a.id, a.name FROM a JOIN z JOIN b ON
a.name='Piotr' AND b.surname like 'a%' AND a.id=z.name_id AND
b.id=z.surname_id

lub:

SELECT a.id, a.name FROM a JOIN z JOIN b ON a.id=z.name_id AND
b.id=z.surname_id AND a.name='Piotr' and b.surname like 'a%'

lub:

SELECT a.id, a.name FROM z JOIN a JOIN b ON
a.name='Piotr' AND b.surname like 'a%' AND z.name_id=a.id AND
z.surname_id=b.id


Czy kolejność łączenia tabel JOIN bądź kolejność warunków we frazie ON
mają jakieś znaczenie dla wydajnośći? Czy powinienem jakoś jeszcze
zoptymalizować te zapytania, czy MySQL sam to zrobi? A jeśli w tabelach
a i b będzie po ok. 100.000 rekordów a w tabeli z tylko ok. 1000? Czy
jakoś optymalniej należy konstruować SELECTA z JOIN?


Z góry dizęki za objaśnienie.
 #2  
13.10.2005, 19:49
Wojciech pBT
X t l a n napisał(a):
> Cześć.
>


>
> tab. z (>100000 rekordów):
> - id (primary key)
> - name_id (mediumint)
> - surname_id (mediumint)
>
>
> Czy kolejność łączenia tabel JOIN


nie

bądź kolejność warunków we frazie ON

tak, kolejno od lewej do prawej, Chyba że MySQL to sobie optymalizuje np
na podstaie kluczy.
Pierwszy warunek ma odsiewać jak najwięcej rekordów

> mają jakieś znaczenie dla wydajnośći? Czy powinienem jakoś jeszcze
> zoptymalizować te zapytania, czy MySQL sam to zrobi? A jeśli w tabelach


nie zapytania, tabele

Załóż indeksy na tę tabelę, która zostawilem

> a i b będzie po ok. 100.000 rekordów a w tabeli z tylko ok. 1000? Czy
> jakoś optymalniej należy konstruować SELECTA z JOIN?


Jeżeli użyjesz

SELECT foo FROM tab1, tab2, tab3 WHERE tab1.w=tab2.w AND ...

to BD bedzie mogła sama sobie nieco lepiej zoptamylizować


pBT
Podobne wątki
MS SQL 2008: klucz obcy w select, wlasna funkcja zamiast join

Zalozmy, ze w tabeli Faktury mam id_kontrahenta, jako klucz obcy do tabeli Kontrahent Na gridzie chce wyswietlic nazwe kontrahenta. Typowo robi sie to przez join. Czy jesli...

SELECT dla INNER JOIN (warunek)

Witam, Baza danych to MySQL. Dla tabel: CREATE TABLE Plyty ( Id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, Autor TEXT, Tytul TEXT, Kategoria INTEGER

JPA i Select z INNER JOIN

Witam Probuje wykonac zapytanie Select wraz ze zlaczeniem INNER JOIN na 2 tabelach. Wzor ze strony [..] a zapytanie SQL to: SELECT Deklaracja.IDDeklaracja,...

INNER JOIN a RIGHT JOIN?

Witajcie! Czy instrukcje 'INNER JOIN' i 'RIGHT JOIN' są równoważne? Czy poniższe przykładowe zapytania zwrócą identyczny wynik? I najważniejsze pytanie: Czy 'INNER JOIN' i...


Czasy w strefie GMT. Teraz jest 23:06. | Privacy Policy