[T-SQL][JOIN Een tabel skippen, is dat sneller, en mag dat?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 06-09 20:35

Wijnbo

Electronica werkt op rook.

Topicstarter
Stel:

Tabel A:
code:
1
a_id <PK>


Tabel B:
code:
1
2
b_id <PK>
b_a_id <FK>


Tabel C:
code:
1
2
3
c_id <PK>
c_a_id <FK>
c_boolean


Visueel:

code:
1
[B]---------[A]---------[C]


Stel, ik wil het volgende doen:

Alles selecteren van tabel B, waarvan het a_id ook voorkomt in c, en waar c_boolean true is.

Wat is dan beter / sneller?
SQL:
1
2
3
SELECT * FROM B
INNER JOIN A ON b_a_id = a_id
INNER JOIN C ON a_id = c_a_id


Of :

SQL:
1
2
SELECT * FROM B
INNER JOIN C ON b_a_id = c_a_id


Oftewel, tabel A skippen, en rechtstreeks van tabel B naar C joinen, ook al ligt er geen FK op?

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ik zou zeggen, probeer het gewoon uit, maar dan niet met '*', want dat is niet zo eerlijk.. :Y) Bedoel je trouwens niet c_a_id ipv c_id? ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 06-09 20:35

Wijnbo

Electronica werkt op rook.

Topicstarter
pedorus schreef op vrijdag 09 april 2010 @ 12:41:
Ik zou zeggen, probeer het gewoon uit, maar dan niet met '*', want dat is niet zo eerlijk.. :Y) Bedoel je trouwens niet c_a_id ipv c_id? ;)
Dat staat er toch? O-)

Heb even een testje gemaakt:

SQL:
1
2
3
4
5
6
7
8
9
SELECT b_waarde, c_condition FROM B
INNER JOIN C ON c_a_id = b_a_id
WHERE c_condition = 1


SELECT b_waarde, c_condition FROM B
INNER JOIN A ON B.b_a_id = A.a_id
INNER JOIN C ON A.a_id = C.c_a_id
WHERE c_condition = 1


Query execution plan geef grote verschillen bij een Select * (logisch!)

Maar bij een select van b en c, maakt het niets uit.

Profiler geeft ook geen verschillen weer.

[ Voor 48% gewijzigd door Wijnbo op 09-04-2010 12:50 ]