perfomacevorteil bei joins bzw mehreren kleinen Afragen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • perfomacevorteil bei joins bzw mehreren kleinen Afragen

    Ich hoffe mal der Titel sagt es schon.

    Ich habe ein System dass zum Aufbau einer Seite zwischen 5 bis 15 Datenbankabfragen benötigt. 15 ist zwar die Ausnahme , aber 5 Abfragen sind das mininum was für meinen Geschmack eigentlich schon etwas viel ist .

    Das geht natürlich etwas auf die Performance.
    Gestern Nacht so kurz vom Schlaf hab ich im Kopf ein paar Joins zusammengebaut die das ganze mit jeweils genau einer Abfrage machen .

    Wenn ich mir eine Klasse baue die alle Abfragen die für die Seite notwenig sind zu einem Join zusammesetzt und dann eine "große" Abfrage macht müsste das so wesentlich schneller gehen als wenn ich 15 kleine Anfragen mache , oder wie sieht da die Praxis aus ?

    Gruß Sono

  • #2
    viele kleine abragen sind in der summe sogar schneller als eine monster-join-abfrage.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      nana Haxe, mal nicht so pauschalisieren!

      kommt ganz darauf an, was deine "Monsterabfrage" macht,

      PHP-Code:
      $this->db->select'    SELECT
                  SQL_CALC_FOUND_ROWS
                  a.bewid_i,
                  IF( f.btag_d IS NULL,
                      IF( l.btag_d IS NULL,
                          MIN( a.eingan_d ),
                          IF( MIN( a.eingan_d ) > MAX( l.btag_d ),
                              MIN( a.eingan_d ),
                              MAX( l.btag_d )
                          )
                      ),
                      MAX( f.btag_d )
                  ) eingan_d,
                  MIN( a.eingan_d )    max_eingang,
                  MAX( f.btag_d )        min_btag,
                  SUM( e.ist_f )    ist,
                  IF( d.haupt_i=1, c.zregio_i,'
      ._ABIS2_SOLLNA_.')
                                  soll,
                  SUM( f.betrag_f )    betrag,
                  c.grupid_i,
                  d.astaid_i,
                  b.nachna_c,
                  b.vornam_c,
                  c.dtxt_c,
                  SUM( d.antrid_i )    antrid_i,
                  g.zahlid_i,
                  MAX( IF( d.semid_i IS NULL, j.semid_i, d.semid_i ) )    sem_i
              FROM posteing a
              INNER JOIN bewerber b
                  ON ( a.bewid_i = b.bewid_i )
              INNER JOIN k_akfz c
                  ON ( b.akfzid_i = c.akfzid_i )
              LEFT JOIN antrag d
                  ON ( a.postid_i = d.postid_i )
              LEFT JOIN l_zahant e
                  ON ( d.antrid_i = e.antrid_i )
              LEFT JOIN zahlung f
                  ON ( e.zahlid_i = f.zahlid_i )
              LEFT JOIN zahextra g
                  ON ( b.bewid_i = g.bewid_i )

              LEFT JOIN t_post i
                  ON ( a.bewid_i = i.bewid_i )
              LEFT JOIN antrag j
                  ON ( i.postid_i = j.postid_i )
              LEFT JOIN l_zahant k
                  ON ( j.antrid_i = k.antrid_i )
              LEFT JOIN zahlung l
                  ON ( k.zahlid_i = l.zahlid_i )

              WHERE a.geholt_i = 0
                  AND c.grupid_i
                      IN ( '
      .$this->userhelper->getGruppen().' )
                  '
      .($gruppe===false?'':(' AND c.grupid_i = '.$gruppe)).'
              GROUP BY a.bewid_i
              HAVING
                  soll <= ist
                  OR betrag > 0
                  OR g.zahlid_i > 0
              ORDER BY sem_i ASC, eingan_d ASC, a.bewid_i ASC
              LIMIT '
      .$start.','.$limit'nach' ); 
      macht zwar genau das, was sie soll, aber mehre kleine knackige Abfragen, wleche eine temporäre Tabelle füllen sind da schneller
      TBT

      Die zwei wichtigsten Regeln für eine berufliche Karriere:
      1. Verrate niemals alles was du weißt!


      PHP 2 AllPatrizier II Browsergame

      Kommentar


      • #4
        OffTopic:
        @TBT: eigentlich hättest du jetzt ein Gegenbeispiel bringen müssen

        Kommentar


        • #5
          ups, wer lesen kann ist klar im Vorteil,

          da habe ich doch Haxes Aussage verdreht *schäm*
          TBT

          Die zwei wichtigsten Regeln für eine berufliche Karriere:
          1. Verrate niemals alles was du weißt!


          PHP 2 AllPatrizier II Browsergame

          Kommentar


          • #6
            Ok dann bleib ich mal lieber bei den kleineren Anfragen.

            Vor allem sind die dinger etwas leichter zu lesen und sofort zu begreifen und nicht erst nach dem dritten mal durchlesen.

            Ich hab mir zwar ne Klasse geschrieben die mir meine Abfragen anhand übergebener Parameter automatisch generiert und ausführt , aber jetzt wo ich TBTs Beispiel genauer betracht wird mir erst so richtig klar was dann beim debuggen des SQL Code auf mich zukommen würde wenn was nicht so klappt wie ich dachte das es sein sollte.

            Danke für eure Hielfe .

            Gruß Sono

            Kommentar

            Lädt...
            X