Wie schnell und zuverlässig ist IN() ?

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

  • Wie schnell und zuverlässig ist IN() ?

    Hallo Leute!

    Ich habe ein Array mit ca. 100-1000 verschiedenen string-Werten von durchschnittl. 10 Zeichen Länge.
    In der Datenbank befinden sich jeweils dazu mehrere (etwa 10-40 Zeilen) mit diesem Wert indexierte Einträge, die ich auslesen möchte.

    Ist es hier ratsam, das Ganze mit nur einer Abfrage durchzuführen -- also mit Hilfe von IN('Wert',...) --, oder muss ich tatsächlich 100-1000 Einzelabfragen durchführen?
    arrays sind klasse

  • #2
    IN() ist hierbei wohl eher die sinnvollere lösung.
    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
      Gut, danke

      Einige Array-Einträge könnte ich mit Hilfe eines zusätzlichen Queries von vorne herein ausschließen. Würde das etwas bringen? Oder spielt es für die Performance keine oder nur eine geringe Rolle, wenn ich statt 1000 nur 500 Einträge in der IN-Liste stehen habe?
      arrays sind klasse

      Kommentar


      • #4
        Original geschrieben von Maranello-550
        Gut, danke

        Einige Array-Einträge könnte ich mit Hilfe eines zusätzlichen Queries von vorne herein ausschließen. Würde das etwas bringen? Oder spielt es für die Performance keine oder nur eine geringe Rolle, wenn ich statt 1000 nur 500 Einträge in der IN-Liste stehen habe?
        kommt drauf an wie aufwendig der andere Query ist und wie (und ob) Latenz zwischen den Servern ist und *bla bla blub*
        rein vom Gefühl her würde ich sagen, mach nur den IN *zuck*

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

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

        Kommentar


        • #5
          Genau solche Fragen bereiten mir Kopfzerbrechen...

          Um für das Ausschließen eine Referenz zu haben, müsste ich den gesamten Index, über den ich mit IN() später auslesen will, auflisten, was, wenn es hoch kommt, etwa 10 000 Einträge in einem Array bedeuten würde.
          Als nächstes muss ich dieses Array mit dem Abfrage-Array (das mit den 1000 Einträgen) vergleichen und nur die Übereinstimmungen in die IN-Liste übernehmen.
          Vom Code her ganz einfach, aber auch sinnvoll?
          arrays sind klasse

          Kommentar


          • #6
            prüfe doch einfach mal die laufzeiten beider versionen. ;-)
            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


            • #7
              Original geschrieben von ghostgambler
              rein vom Gefühl her würde ich sagen, mach nur den IN *zuck*

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

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

              Kommentar


              • #8
                und dein gefühl kennst auch den objektiven vergleich? das glaube ich nicht.
                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


                • #9
                  Also ich hab sowas fürn ein Import Scribt schonmal gemacht - IN ist auf jeden Fall schneller als Tausen vergleiche. Du wirst nur, je nachdem wie groß deine Query wird, die max_query_lenght hochsetzen müssen.

                  Kommentar


                  • #10
                    Ich habe es jetzt getestet und ein einfaches in mit allen Werten scheint tatsächlich schneller zu sein, als wenn ich vorher erst eine Auswahl treffe...

                    arrays sind klasse

                    Kommentar

                    Lädt...
                    X