Michael Vogel: Wie schnell ist mySQL ("like"-Abfrage bei mehreren tausend Datensätzen)

Hi!

Ich werde demnächst eine Mini-Suchmaschine basteln, die Einträge werden wohl im Bereich von etwa 5000 Datensätzen liegen. Wie sieht es da eigentlich mit der Performance von mySQL aus?

Geht das ohne Probleme, dort eine Ähnlichkeitssuche, bzw. eine Suche nach Teilbegriffen durchzuführen?

Danke!

Michael

  1. auf jeden fall ist eine "echte" volltextsuche in jedem fall schneller, beim MSSQL 7.0 geht das... vieleicht beim mysql auch?!

    cu

    ANDREAS

    Hi!

    Ich werde demnächst eine Mini-Suchmaschine basteln, die Einträge werden wohl im Bereich von etwa 5000 Datensätzen liegen. Wie sieht es da eigentlich mit der Performance von mySQL aus?

    Geht das ohne Probleme, dort eine Ähnlichkeitssuche, bzw. eine Suche nach Teilbegriffen durchzuführen?

    Danke!

    Michael

    1. auf jeden fall ist eine "echte" volltextsuche in jedem fall schneller, beim MSSQL 7.0 geht das... vieleicht beim mysql auch?!

      Was ist der Unterschied zwischen "like" und einer "echten" Volltextsuche?

      Tschau!

      Michael

      1. auf jeden fall ist eine "echte" volltextsuche in jedem fall schneller, beim MSSQL 7.0 geht das... vieleicht beim mysql auch?!

        Was ist der Unterschied zwischen "like" und einer "echten" Volltextsuche?

        Tschau!

        Michael

        Hallo Michael,

        LIKE sucht innerhalb eines Feld nach dem Suchbegriff, wobei die
        Stelle, an der der Begriff vorkommen muss, mit Wildcards bestimmt wird.

        LIKE 'test%' -> sucht am Anfang des Inhalts (egal was danach kommt)
                        in gewissen Fällen kann hier das DBMS auch einen Index benutzen
        LIKE '%test' -> sucht am Ende des Inhalts (egal was davor kommt)
        LIKE '%test' -> sucht den Begriff irgendwo im Inhalt (langsamste Variante)

        Eine Volltextsuche ist anders aufgebaut. Hierbei erstellt das DBMS
        eigene Tabellen mit den Begriffen und referenziert dort auf den
        eigentlichen Datensatz. Man kann es so einstellen, daß Wörter wie
        "und", "oder", ... nicht indiziert werden, denn nach diesen Wörtern
        wird wohl keine suchen, diese werden eher als Operatoren verwendet.

        Durch den Aufbau dieser eigenen Tabellen kann das DBMS natürlich viel
        schneller filtern als bei einer LIKE-Abfrage.

        Tschau, Stefan

        1. LIKE sucht innerhalb eines Feld nach dem Suchbegriff, wobei die
          Stelle, an der der Begriff vorkommen muss, mit Wildcards bestimmt wird.

          Jupp, soweit ist mir das bekannt. Ich programmiere zwar beruflich nicht mit SQL, jedoch auch mit diversen anderen Datenbanksystemen.

          Eine Volltextsuche ist anders aufgebaut. Hierbei erstellt das DBMS
          eigene Tabellen mit den Begriffen und referenziert dort auf den
          eigentlichen Datensatz.

          Achso. Stimmt eigentlich. Hmm, das müßte IMHO recht einfach zu erledigen sein. Hmm, schwierig wird es nur, wenn mehrere Schlüsselworte reinkommen, aber nicht unmöglich.

          Naja, die Datenmenge wird zu Anfang nicht sooo groß sein, da wird like reichen. Wenn es dann dem Kunden zu langsam wird, kann ich mir immer noch diese Schlüsselwortsuche durch den Kopf gehen lassen.

          Mache ich das jetzt schon rein, wird ihm das evtl. zu teuer. Es wäre allerdings nur fair, wenn ich ihn auf diese Gefahr hinweise, denke ich.

          Danke!

          Michael

          1. LIKE sucht innerhalb eines Feld nach dem Suchbegriff, wobei die
            Stelle, an der der Begriff vorkommen muss, mit Wildcards bestimmt wird.

            Jupp, soweit ist mir das bekannt. Ich programmiere zwar beruflich nicht mit SQL, jedoch auch mit diversen anderen Datenbanksystemen.

            »»

            Eine Volltextsuche ist anders aufgebaut. Hierbei erstellt das DBMS
            eigene Tabellen mit den Begriffen und referenziert dort auf den
            eigentlichen Datensatz.

            Achso. Stimmt eigentlich. Hmm, das müßte IMHO recht einfach zu erledigen sein. Hmm, schwierig wird es nur, wenn mehrere Schlüsselworte reinkommen, aber nicht unmöglich.

            Naja, die Datenmenge wird zu Anfang nicht sooo groß sein, da wird like reichen. Wenn es dann dem Kunden zu langsam wird, kann ich mir immer noch diese Schlüsselwortsuche durch den Kopf gehen lassen.

            Mache ich das jetzt schon rein, wird ihm das evtl. zu teuer. Es wäre allerdings nur fair, wenn ich ihn auf diese Gefahr hinweise, denke ich.

            Danke!

            Michael

            Hallo Michael,

            für Dich als Programmierer ändert sich eigentlich nicht viel, da daß DBMS
            die benötigten Tabellen selbst pflegt. Der einzigste Unterschied ist
            der, daß Du einen Datenbankserver benötigst.
            Ein Oracle RDBMS wird wohl nict in euerm Budget drin sein, aber im SBS
            4.5 ist ein MS SQLServer 7.0 enthalten (max. 50 DB's á 10 GB). Ist nicht
            mal so teuer.

            Im SQL Server ändert sich die Syntax der Abfrage dann in etwa so:

            <%
            ' -- SQL Statement bisher
            'SQL = "SELECT * FROM <tablename> WHERE <fieldname> LIKE '%" & var & "%'"

            ' --- SQL Statement neu
            SQL = "SELECT * FROM <tablename> WHERE CONTAINS(<fieldname>,'" & Var & "')"
            %>

            Da ich denke, daß wir jetzt weit genug vom eigentlichen Thema weg sind
            (MySQL und jetzt bei SQL Server), würde ich sagen, beenden wir diesen
            Teil.

            Tschau, Stefan