MySQL Forums
Forum List  »  German

Re: Wird Abfrage durch view-Tabellen gebremst?
Posted by: Alwin Bekker
Date: May 28, 2011 04:19PM

> es ist natürlich etwas schwierig für mich zu
> helfen, wenn Deine Tabellen andere sind, als ich
> hier sehe. Bzw. ich den Original-Query nicht
> sehe.

Das habe ich bereits vermutet ;) An dieser Stelle danke für deine Hilfe unter erschwerten Bedingungen.

> Hat Du den ORDER BY NULL wahrgenommen in meinem
> Beispiel? Bitte verwenden, spart eventuell
> Temporäre Tabellen.

Ja, habe ich! Kann/soll ich das auch bei VIEW anwenden?

create view projekte_view
as
select personen.personen_id,
group_concat(distinct projekte.projekt_name order by projekte.projekt_id separator ', ') as projekt_name
from personen
join personen_projekte
on personen.personen_id = personen_projekte.personen_id
join projekte
on personen_projekte.projekt_id = projekte.projekt_id
group by personen.personen_id
order by NULL;

Mein Geschwindigkeitsproblem habe ich mittlerweile - nachdem ich den gesamten Abend vor dem PC verbracht habe - gelöst. Ich habe meine Abfrage einfach ausgemistet.

Vorher:

select personen.*, standort.standort_name,
group_concat(distinct personen_projekte.projekt_id separator ', ') as projekt_id_gesucht,
group_concat(distinct projekte.projekt_name order by projekte.projekt_id separator '. ') as projekt_name_gesucht,
projekte_view.projekt_name as alle_zugeordneten_projekte
from
personen
join standort
on personen.standort_id = standort.standort_id
join personen_projekte
on personen.personen_id = personen_projekte.personen_id
join projekte
on personen_projekte.projekt_id = projekte.projekt_id
join projekte_view
on personen.personen_id = projekte_view.personen_id
where personen.name like '%an%'
and personen_projekte.projekt_id in (3)
group by personen.personen_id;

+-------------+-------+-------------+---------------+--------------------+----------------------+------------------------------+
| personen_id | name  | standort_id | standort_name | projekt_id_gesucht | projekt_name_gesucht | alle_zugeordneten_projekte   |
+-------------+-------+-------------+---------------+--------------------+----------------------+------------------------------+
|           2 | Hans  |           1 | Berlin        | 3                  | Projektname 3        | Projektname 3                |
|           4 | Anita |           2 | Bern          | 3                  | Projektname 3        | Projektname 1, Projektname 3 |
+-------------+-------+-------------+---------------+--------------------+----------------------+------------------------------+

Nachher:

select personen.*, standort.standort_name,
projekte_view.projekt_name as alle_zugeordneten_projekte
from
personen
join standort
on personen.standort_id = standort.standort_id
join personen_projekte
on personen.personen_id = personen_projekte.personen_id
join projekte_view
on personen.personen_id = projekte_view.personen_id
where personen.name like '%an%'
and personen_projekte.projekt_id in (3)
group by personen.personen_id;

+-------------+-------+-------------+---------------+------------------------------+
| personen_id | name  | standort_id | standort_name | alle_zugeordneten_projekte   |
+-------------+-------+-------------+---------------+------------------------------+
|           2 | Hans  |           1 | Berlin        | Projektname 3                |
|           4 | Anita |           2 | Bern          | Projektname 1, Projektname 3 |
+-------------+-------+-------------+---------------+------------------------------+

Das Fehlen des Folgenden JOINs beschleundigt die Abfrage ungemein:

"join projekte
on personen_projekte.projekt_id = projekte.projekt_id "

In meiner "richtigen" Datenbank bilde ich analog zu "Projekte" noch zwei weitere m:n Beziehungen ab. Seit ich diese drei JOINs entfernt habe, benötigen Abfragen die zuvor ein 30sec timeout verursacht haben nur mehr Sekundenbruchteile. Für mich als Anfänger, ist dieser Geschwindigkeitsschub nicht ganz nachvollziehbar, bleibt mir nur mich darüber zu freuen :)

Danke und gute Nacht!



Edited 1 time(s). Last edit at 05/28/2011 04:21PM by Alwin Bekker.

Options: ReplyQuote




Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.