Toon posts:

[MySQL] hiervoor 2 tabbellen gebruiken of niet?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een php website met een mysqldb die momenteel 128,705 records heeft.
In mijn tabel releases heb ik o.a. een colom "url" en "title", alleen niet alle titels hebben een url.
Ik heb dus veel lege plekken in de tabel releases.
Is het nou beter als ik een apparte tabel maak voor de urls? De website is nog wel lekker snel omdat ik indexes gebruik.
En al zou ik een apparte tabel maken voor de urls, dan moet ik steeds 2 query's gebruiken om te checken of een release een url heeft? Gaat dat dan weer niet langzamer als wat ik nu heb?

select * from releases,url where releases.id='$id' and url.id='$id'
geeft natuurlijk alleen wat weer als er bij de titel een url hoort.

Advies wanted, thnx :)

Verwijderd

Zijn er meerdere URLs die bij dezelfde release horen, or heerdere releases die bij dezelfde URL horen? In die gevallen zou ik een scheiding maken, anders niet.

Een query over 2 tabellen kan in dit geval met een JOIN query. Dat is inderdaad langzamer dan met 1 tabel werken. Aan de andere kant zal het aantal records in 1 van de twee tabellen dalen als er herhalende groepen zijn, waardoor de performance niet al te veel hoeft te dalen, en het onderhoud van de gegevens makkelijker zal zijn.

HTH :)

Verwijderd

twee query's hoef je niet te maken hè... je kan die tabellen dan gewoon joinen...

Verwijderd

Topicstarter
Verwijderd schreef op 22 november 2002 @ 13:02:
Zijn er meerdere URLs die bij dezelfde release horen, or heerdere releases die bij dezelfde URL horen? In die gevallen zou ik een scheiding maken, anders niet.

Een query over 2 tabellen kan in dit geval met een JOIN query. Dat is inderdaad langzamer dan met 1 tabel werken. Aan de andere kant zal het aantal records in 1 van de twee tabellen dalen als er herhalende groepen zijn, waardoor de performance niet al te veel hoeft te dalen, en het onderhoud van de gegevens makkelijker zal zijn.

HTH :)
Bedankt voor je antwoord :)
Nee, een release heeft maximaal 1 url.
Dus je bedoelt dat ik het beter zo kan laten?
Ik zal eens kijken hoe dat JOIN werkt, nog nooit gebruikt om eerlijk te zijn :X

Verwijderd

code:
1
SELECT * FROM tabel1 LEFT JOIN tabel2 ON tabel1.id = tabel2.id


zoiets :D

Verwijderd

Topicstarter
Verwijderd schreef op 22 november 2002 @ 13:08:
code:
1
SELECT * FROM tabel1 LEFT JOIN tabel2 ON tabel1.id = tabel2.id


zoiets :D
Hmm, net geprobeert, hij doet het niet of hij blijft héél lang laden :(
Ik heb de tabel url al toegevoegd, met urls en id's :)

[edit]
RIGHT JOIN
die moest het zijn :D
thnx

[ Voor 9% gewijzigd door Verwijderd op 22-11-2002 13:28 ]


  • Darkvater
  • Registratie: Januari 2001
  • Laatst online: 26-08-2024

Darkvater

oh really?

code:
1
SELECT T1 FROM table1 T1, table2 T2 WHERE T1.id=T2.id

volgens mij kan deze ook


Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge


Verwijderd

Topicstarter
Darkvater schreef op 22 November 2002 @ 13:28:
code:
1
SELECT T1 FROM table1 T1, table2 T2 WHERE T1.id=T2.id

volgens mij kan deze ook
Nope, dat had ik in mijn begin post al gezegt :)

btw, ik heb toch nog een probleem..

code:
1
SELECT * FROM tabel1 RIGHT JOIN tabel2 ON tabel1.id = tabel2.id


die laat nog steeds alleen de releases zien die een url hebben :(

Verwijderd

iets me OR tabel2.id = NULL ?!

Verwijderd

Verwijderd schreef op 22 November 2002 @ 13:06:
[...]

Bedankt voor je antwoord :)
Nee, een release heeft maximaal 1 url.
Dus je bedoelt dat ik het beter zo kan laten?
Ik zal eens kijken hoe dat JOIN werkt, nog nooit gebruikt om eerlijk te zijn :X
Zo bedoel ik het niet helemaal. Voorbeeldje:
code:
1
2
3
4
5
6
release     url
A               http://xxx.com
B               http://xxx.com
C               Null
D               http://ddd.com
E               http://eee.com

In dit geval hebben 2 releases dezelfde URL. In dat geval is het beter om het als volgt te doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
URL
UrlID   UrlData
1         http://xxx.com
2         http://ddd.com
3         http://eee.com

RELEASE
Release  UrlID
A             1
B             1  
C             Null
D             2
E             3

Snap je?

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Een slim DBMS zorgt er bovendien voor dat het lege veld geen ruimte, of slechts heel weinig ruimte kost. De hoeveelheid opslag/retrieve capaciteit wordt er dus niet door beïnvloed.

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

Verwijderd schreef op 22 november 2002 @ 13:42:
[...]

Zo bedoel ik het niet helemaal. Voorbeeldje:
code:
1
2
3
4
5
6
release     url
A               http://xxx.com
B               http://xxx.com
C               Null
D               http://ddd.com
E               http://eee.com

In dit geval hebben 2 releases dezelfde URL. In dat geval is het beter om het als volgt te doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
URL
UrlID   UrlData
1         http://xxx.com
2         http://ddd.com
3         http://eee.com

RELEASE
Release  UrlID
A             1
B             1  
C             Null
D             2
E             3

Snap je?


aanvullend: dat noemen ze nou normaliseren, en daar zijn hele spannende boeken over :)
(maar MrX kan er ook leuk over vertellen )

Doet iets met Cloud (MS/IBM)

Pagina: 1