Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: Unregelmäßigkeit bei Select-Abfragen

  1. #11
    Lara ist offline Benutzer
    Registriert seit
    10.11.2010
    Beiträge
    40

    Standard

    Ups, du hast recht. Ich habe den Befehl im falschen Editor verarbeitet. I-)

    Das ist das richtige Ergebnis:

    Code:
    Nested Loop  (cost=39.71..1411746492593230768504832.00 rows=70536754371864697356943360 width=298)
      ->  Nested Loop  (cost=0.00..1011405155936572407808.00 rows=35732904950286071627776 width=256) 
            ->  Nested Loop  (cost=0.00..13018407241416594.00 rows=457217316677364544 width=182)     
                  ->  Nested Loop  (cost=0.00..12673432670.08 rows=388414701668 width=147)           
                        ->  Seq Scan on t_user_portal_access  (cost=0.00..1980.72 rows=78172 width=90)
                        ->  Seq Scan on t_source_information_portal  (cost=0.00..112435.19 rows=4968719 width=57)
                  ->  Seq Scan on t_user_portal_menu  (cost=0.00..21745.37 rows=1177137 width=35)                
            ->  Seq Scan on t_user  (cost=0.00..1430.53 rows=78153 width=74)                                     
      ->  Materialize  (cost=39.71..59.45 rows=1974 width=42)                                                    
            ->  Seq Scan on t_user_property  (cost=0.00..37.74 rows=1974 width=42)
    und dass ist das Ergebnis, wenn ich die Tabellen einzeln aufrufe:
    Code:
    Seq Scan on tab_1 (cost=0.00..112435.19 rows=4968719 width=57)
    Seq Scan on tab_2 (cost=0.00..1430.53 rows=78153 width=74)
    Seq Scan on tab_3 (cost=0.00..1980.72 rows=78172 width=90)
    Seq Scan on tab_4 (cost=0.00..21745.37 rows=1177137 width=35)
    Seq Scan on tab_5 (cost=0.00..37.74 rows=1974 width=42)

  2. #12
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    525

    Standard

    SELECT * FROM tab_2, tab_1, tab_4, tab_3, tab_5
    Du weisst aber schon, dass das Statement - mit Verlaub gesagt - totaler Blödsinn ist?

    Das erzeugt ein kartesisches Produkt aus allen 5 Tabellen. Dass das immer langsamer wird, wenn die Tabellen größer werden ist klar.

    Verwende doch mal ein realistisches Statement welches die verwendeten Tabellen auch korrekt JOINed
    A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

  3. #13
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.468

    Standard

    Zitat Zitat von castorp Beitrag anzeigen
    Du weisst aber schon, dass das Statement - mit Verlaub gesagt - totaler Blödsinn ist?

    Das erzeugt ein kartesisches Produkt aus allen 5 Tabellen. Dass das immer langsamer wird, wenn die Tabellen größer werden ist klar.

    Verwende doch mal ein realistisches Statement welches die verwendeten Tabellen auch korrekt JOINed

    LOL: rows=70536754371864697356943360

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  4. #14
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Ja, kein Wunder, dass das langsam ist.

    Obwohl, ich kann dir sicherlich die passende Appliance verkaufen, um das zu beschleunigen.

    Ernsthaft: die Anfrage in der Form liest zuviele Daten. Kannst du das einschränken?
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  5. #15
    Lara ist offline Benutzer
    Registriert seit
    10.11.2010
    Beiträge
    40

    Standard

    Ich will die Anfrage doch gar nicht beschleunigen. Ich will doch nur wissen warum ...

    ... wenn ich eine Tabelle abfrage zwischen 2.400.000 und 2.800.000 Datensätzen

    ... und wenn ich 3 Tabellen abfrage zwischen 1.200.000 und 1.600.000 Datensätzen ...

    ... es diesen Sprung macht. (siehe Graphik im ersten Post.)

    Das es immer langsamer wird, ist mir klar. Ich finde es nur komisch, dass es so sprunghaft passierst. Und warum trifft dieser Sprung nicht bei der Abfrage von 5 Tabellen auf? Warum wird die Abfrage von 3 Tabellen schneller langsam als die von 5?

    Versteht ihr mein Problem? Ich will keine Optimierung (vielleicht später). Ich will eine Begründung, die ich vielleicht auch in meine Bachelorarbeit reinschreiben könnte ...

  6. #16
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.468

    Standard

    Zitat Zitat von Lara Beitrag anzeigen
    Ich will die Anfrage doch gar nicht beschleunigen. Ich will doch nur wissen warum ...

    ... wenn ich eine Tabelle abfrage zwischen 2.400.000 und 2.800.000 Datensätzen

    ... und wenn ich 3 Tabellen abfrage zwischen 1.200.000 und 1.600.000 Datensätzen ...

    ... es diesen Sprung macht. (siehe Graphik im ersten Post.)

    Das es immer langsamer wird, ist mir klar. Ich finde es nur komisch, dass es so sprunghaft passierst. Und warum trifft dieser Sprung nicht bei der Abfrage von 5 Tabellen auf? Warum wird die Abfrage von 3 Tabellen schneller langsam als die von 5?

    Versteht ihr mein Problem? Ich will keine Optimierung (vielleicht später). Ich will eine Begründung, die ich vielleicht auch in meine Bachelorarbeit reinschreiben könnte ...
    Schau Dir doch einfach mal die Ausgaben von EXPLAIN ANALYSE an. Achte dabei auf die Pläne, auf die Ergebnissmengen, auf die geschätzten Kosten etc.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #17
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    525

    Standard

    Zitat Zitat von Lara Beitrag anzeigen
    Ich finde es nur komisch, dass es so sprunghaft passierst. Und warum trifft dieser Sprung nicht bei der Abfrage von 5 Tabellen auf? Warum wird die Abfrage von 3 Tabellen schneller langsam als die von 5?
    Weil Du das kartesische Produkt der Tabellen bildest. Und das wächst exponentiell.

    3 Tabellen mit je 100 Datensätzen liefern ein kartesisches Produkt von 1000000 Datensätzen
    3 Tabellen mit je 1000 Datensätzen liefern ein kartesisches Produkt von 1000000000 Datensätzen

    4 Tabellen mit je 100 Datensätzen liefern ein kartesisches Produkt von 100000000 Datensätzen
    5 Tabellen mit je 100 Datensätzen liefern ein kartesisches Produkt von 10000000000 Datensätzen

    Klar, dass das irgendwann in Größenordungen geht wo es wirklich langsam wird.

    Wie gesagt: nimm ein realistisches Statement bei dem ein vernünftiger JOIN verwendet wird und kein kartesisches Produkt erzeugt wird.
    A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Frage SELECT Npgsql vor jeden SELECT
    Von tzzdr im Forum SQL
    Antworten: 3
    Letzter Beitrag: 09.12.2011, 11:22
  2. SELECT eine Variable doppelt abfragen
    Von renzge im Forum SQL
    Antworten: 4
    Letzter Beitrag: 23.07.2009, 13:30
  3. Antworten: 6
    Letzter Beitrag: 15.06.2009, 10:59
  4. Antworten: 2
    Letzter Beitrag: 22.12.2008, 13:44
  5. Antworten: 14
    Letzter Beitrag: 19.06.2007, 12:31

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum