[SQL allgemein] zwei Selects schneller als INNER JOIN?

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

  • [SQL allgemein] zwei Selects schneller als INNER JOIN?

    Ich hatte eine Idee, mit der ich eine n:m Beziehung umgehen wollte, um vielleicht schneller zu sein.

    Ähnlich wie bei phpbb_search_results speichere ich die gesuchten ids in einem Array und speichere sie in der Datenbank tabelle1 per serialize(array).

    Nun brauche ich bei der Ausgabe keinen INNER JOIN mehr, sondern lese erstmal die Grunddaten aus, damit ich die normalen Daten beziehe und den Inhalt des Arrays.

    Danach mit einer zweiten Abfrage erhalte ich die Informationen zu den ids der tabelle2:
    Code:
    SELECT * FROM tabelle2 WHERE id IN(implode(', ', unserialize($array)))
    D.h. anstatt einem INNER JOIN Konstrukt nutze ich zwei normale SELECTs.

    Fragen:
    - Sehe ich das richtig, dass ich dann schneller bin? (beide Tabellen werden mehrere tausend Einträge besitzen)
    - Was mache ich, wenn in tabelle2 ids ändern oder löschen will. Wie ermittel ich dann, welche Einträge in tabelle1 die ids im serialized(array) haben, damit ich die Bedarf dort ebenfalls rauslöschen kann?

    Gruß
    mein Honda Forum | meine Scripte

  • #2
    Re: [SQL allgemein] zwei Selects schneller als INNER JOIN?

    Original geschrieben von mgutt
    Sehe ich das richtig, dass ich dann schneller bin? (beide Tabellen werden mehrere tausend Einträge besitzen)
    Kommt drauf an, im Normalfall sollte allerdings der INNER JOIN schneller sein
    Was mache ich, wenn in tabelle2 ids ändern oder löschen will. Wie ermittel ich dann, welche Einträge in tabelle1 die ids im serialized(array) haben, damit ich die Bedarf dort ebenfalls rauslöschen kann?
    Grübeln und Haare raufen?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Re: Re: [SQL allgemein] zwei Selects schneller als INNER JOIN?

      Original geschrieben von mrhappiness
      Kommt drauf an, im Normalfall sollte allerdings der INNER JOIN schneller sein
      Für die Datenbank eher nicht - fürs php, ja, aber die Datenbank rennt schneller wenn nur eine Tabelle abgefragt werden muss~ meine 2 Cents~

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        Re: Re: Re: [SQL allgemein] zwei Selects schneller als INNER JOIN?

        Original geschrieben von ghostgambler
        Für die Datenbank eher nicht - fürs php, ja, aber die Datenbank rennt schneller wenn nur eine Tabelle abgefragt werden muss~ meine 2 Cents~
        Wie fürs php? Das kann ja nicht sein was Du sagst. In dem Sinne ist es ja zweifache Nutzung der db-Klasse, also auch doppelter Aufwand für PHP. Und doppelte Filterung der Daten bzw. Einspielung in ein Array etc.

        Aber ich glaube, dass ein INNER JOIN in zwei Tabellen, die x-tausend Beiträge beinhalten, langsamer sein müsste, da der verbrauchte Speicher durch den Vergleich der Tabellen doch höher ist oder nicht?

        Ein "WHERE id IN(id_array)" ist doch ein simpler id = id.

        Bisher konnte ich noch nicht viel finden, was meine Vermutung stützt außer dies:
        http://xoops.peak.ne.jp/md/news/inde...le&storyid=122

        Wird wohl mal Zeit ein Benchmark zu machen

        Grübeln und Haare raufen?
        Ok, das reicht aus, um mir für die Sache, die ich mir gedacht habe, etwas anderes zu überlegen. Aber die Grundsatzfrage zur Geschwindigkeit lasse ich mal offen
        mein Honda Forum | meine Scripte

        Kommentar


        • #5
          Re: Re: Re: Re: [SQL allgemein] zwei Selects schneller als INNER JOIN?

          Original geschrieben von mgutt
          Wie fürs php? Das kann ja nicht sein was Du sagst. In dem Sinne ist es ja zweifache Nutzung der db-Klasse, also auch doppelter Aufwand für PHP. Und doppelte Filterung der Daten bzw. Einspielung in ein Array etc.
          Wenn man sich 200 Einträge ausliest und das nicht per JOIN, muss man für den zweiten Query erstmal ein Array mit allen IDs des ersten Queries in php erstellen, das dauert und kostet Speicher - das muss man beim Join nicht, dafür hat beim Join die DB zusätzlich Rechenaufwand, ist doch logisch, oder nicht?!

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            Wenn das EXPLAIN-Statement der DB für den INNER JOIN (Indizes?, filesort?, temporary?, ...) gut aussieht, wage ich zu behaupten, dass du es nicht besser optimieren kannst als die DB
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Original geschrieben von mrhappiness
              Wenn das EXPLAIN-Statement der DB für den INNER JOIN (Indizes?, filesort?, temporary?, ...) gut aussieht, wage ich zu behaupten, dass du es nicht besser optimieren kannst als die DB
              Ich hab ja auch nicht gesagt, dass es insgesamt schneller geht, sondern dass es für die DB schneller geht ... php hat natürlich mehr Arbeit wenn die DB weniger hat, aber bei uns z.B. langweilt sich der Webserver während der DB-Server genug zutun hat ~ wir rechnen demnach lieber etwas mehr in php als die Arbeit auf den DB-Server zu schubsen ^^,

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar

              Lädt...
              X