Toon posts:

[MySQL] Langzame query...

Pagina: 1
Acties:

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
    count(DISTINCT(catagories.id)) as cats,
    count(DISTINCT(fora.id)) as foras,
    count(DISTINCT(topic.id)) as topics,
    count(DISTINCT(post.id)) as posts,
    count(DISTINCT(member.id)) as users
FROM
    catagories, 
    fora, 
    topic, 
    post,
    member


deze is echt super sloom, hoe kan dat eingelijk ik vraag alleen maar de 'count' van de ID en verder niets :{ of komt dat doordat ik alles in 1 query heb gezet?... iemand suggeties?

  • Buzzman
  • Registratie: Juni 2000
  • Niet online
Als je .id's uniek zijn, zou je de distinct al weg kunnen laten.
En als je het aan mij vraagt zou je misschien denken dat je een of andere join doet, maar dat weet ik niet zeker.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:34
Waarom gaat het gigantisch sloom:
Omdat je een cartesiaans product hebt.

Je selecteert gegevens uit meerdere tabellen, maar je specifieert nergens een join.
Wat gaat het DBMS dus doen:
voor ieder record uit categories alle records uit fora ophalen, en voor ieder record uit fora alle records uit topic enz...

Je gaat dus:
aantal records in categories x aantal records in fora x aantal records in topic ... records terugkrijgen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
nee, de ID's van ieder 'tabel' in me database kunnen het zelfde zijn ;)

Verwijderd

Topicstarter
whoami schreef op 08 januari 2003 @ 11:25:
Waarom gaat het gigantisch sloom:
Omdat je een cartesiaans product hebt.

Je selecteert gegevens uit meerdere tabellen, maar je specifieert nergens een join.
Wat gaat het DBMS dus doen:
voor ieder record uit categories alle records uit fora ophalen, en voor ieder record uit fora alle records uit topic enz...

Je gaat dus:
aantal records in categories x aantal records in fora x aantal records in topic ... records terugkrijgen.
idd en dat waren 54054934853 stuks ofzo :D maar met distinct haalde ie dat weg, dus op naar echte joins? of apparte query's?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:34
Verwijderd schreef op 08 January 2003 @ 11:26:
[...]


idd en dat waren 54054934853 stuks ofzo :D maar met distinct haalde ie dat weg, dus op naar echte joins? of apparte query's?


Aparte queries gaan in dit geval waarschijnlijk gemakkelijker zijn....
't Is te zien hoe en wanneer en welke gegevens je op een bepaald moment wilt.

https://fgheysels.github.io/


Verwijderd

Topicstarter
hey!.. whoami tnx! :)

ik heb nu gewoon het volgende gedaan en werkt super wreed snel

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT 
    count(DISTINCT(catagories.id)) as cats, 
    count(DISTINCT(fora.id)) as foras, 
    count(DISTINCT(topic.id)) as topics, 
    count(DISTINCT(post.id)) as posts, 
    count(DISTINCT(member.id)) as users 
FROM 
    catagories, 
    member
LEFT JOIN
    fora
ON
    fora.index_id = catagories.id
LEFT JOIN
    topic
ON
    topic.forum_id = fora.id
LEFT JOIN
    post
ON
    post.topic_id = topic.id


en members kan ik nergens aan vast knopen :)

  • Buzzman
  • Registratie: Juni 2000
  • Niet online

Dat bedoelde ik dus met "een of andere join" :+ ;)

Verwijderd

Topicstarter
Buzzman schreef op 08 januari 2003 @ 11:32:

[...]

Dat bedoelde ik dus met "een of andere join" :+ ;)
:D heel handig :)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Aparte queries want je hebt het over verschillende gegevens. Dat is een stelregel die je aan moet houden.

Hou dan in 't achterhoofd "Hm, ik ga eerst even de fora tellen... 1,2,3...". Ok, nou wil ik ook het totaal aantal topics hebben... "Hm, 1,2,3...", etcetera.

Dat zijn dus verschillende "vragen" die je aan de database doet en moet je dus ook niet in 1 query stoppen. Je moet ze in 1 query stoppen wanneer de verschillende vragen direct gerelateerd zijn aan elkaar:
  • Ik wil het aantal fora hebben [list]en [b]per forum[/] het aantal topics[list]en [b]per topic[/] het aantal berichten[/][/]
Kortom, in zo'n query is de relatie tussen de verschillende entiteiten "duidelijk" en is er dus sprake van een JOIN. Wanneer die relatie er niet is, moet je 't niet in 1 query willen stoppen.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
drm, je hebt helemaal gelijk. Ik had net ff me database leeggegooid en zag dat wanneer ik geen post heb der ook geen cats, fora's en topics waren :P ik ga het gelijk omzetten naar aparte query's :)

  • momania
  • Registratie: Mei 2000
  • Laatst online: 12:39

momania

iPhone 30! Bam!

Probeer er ook voor te zorgen om de id's echt id's te laten zijn en dus uniek.
Hiierdoor hoef de dan de distinct niet te gaan gebruiken en dat scheelt ook weer performance.

Neem je whisky mee, is het te weinig... *zucht*

Pagina: 1