Mysql abfrage: was ist schneller? LIKE oder ...

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

  • Mysql abfrage: was ist schneller? LIKE oder ...

    Hi,

    hab mal ne frage... bin relatiev neu bei Mysql & PHP und steh vor einem "Problem"... ich muß mich für mein neues Projekt auch sehr mit der geschwindigkeit einer Abfrage auseindersetzen. Und zwar es geht um die gestaltung einer Tabelle... mit Primary und Foreign Keys hab ich mich noch nicht beschäftigt, spielt hier aber (im bezug auf geschwindikeit) eine Rolle....
    die Frage klingt vielleicht doof, aber ich möchte einfach sicher gehen

    2 möglichkeiten hab ich.....

    eine Tabelle ist fix:
    tabelle1:
    id INT unsigned autoincement,
    name text,
    Adresse text,
    ....



    Hier mal grundlegende struktur1:
    tabelle2:
    spalte1 INT unsigned,
    spalte2 INT unsigned,
    spalte3 INT unsigned,
    spalte4 INT unsigned,
    Spalte5 INT unsigned,
    inhalt text


    die zugehörige Abfrage...:
    SELECT * FROM tabelle2 WHERE spalte1==10363 || spalte2==10363 || spalte3==10363 || spalte4==10363 || spalte5==10363

    die Zahl "10363" ist hier die UsereID aus Tabelle1
    ausgeben will ich dann alle zugehörigen Namen, die sich in den gefundenen Einträgen befinden und natürlich den Inhalt (der eigentlich auch ein Verweis auf ne andere Tabelle sein) ...
    wird sich sicher mit ner crossquery (oder mit den Keys) machen lassen....



    Struktur2:

    spalte text,
    inhalt text
    (+weitere spalten)

    die spalten 1-5 fasse ich hier zusammen, indem ich die einzelnen zahlen mit einem Buchstaben trenne zB 138x63453x736x36347x9567503

    zugehörige Abfrage wäre:
    SELECT inhalt FROM tabelle2 WHERE spalte LIKE '%10363%'

    um die namen zu den Userids herauszufinden müßte ich hier auf jedenfall zuerst mit explode die Zahlen trennen und ein zweite Abrage machen...

    SELECT name WHERE id IN (138, 63453, 736, 36347, 9567503)



    Was ist schneller???
    ich nehme mal an Version1, sicher bin ich mir aber nicht ganz, und wie schauts aus wenn ich 10 Spalten hätte???

  • #2
    Beide Möglichkeiten sind jenseits von Gut und Böse.

    Lies dir mal ein paar Tutorials zu den Themen Normalisierung und Joins durch.
    hopka.net!

    Kommentar


    • #3
      Original geschrieben von Hopka
      Beide Möglichkeiten sind jenseits von Gut und Böse.

      Lies dir mal ein paar Tutorials zu den Themen Normalisierung und Joins durch.
      schade.... und ich hatte gehofft daß ich das mit einer Abfrage, und einer Ergebniszeile machen kann ...

      ist das schneller wenn ich nur eine Spalte habe, aber dafür den gleichen Inhalt (bis auf die UserID) auf mehrer Zeilen verteile???
      ist auch blöd, weil , dann müßte ich eine ID für jeden neuen Eintrag vergeben, und beim abfragen zuerst die IDs rausfinden, und dann die anderen Namen. Außerdem dauerts dann beim schreiben ums 5-fache länger...weil ich ja dann 5 eilen schreiben muß

      Danke auf jedenfall für deine Antwort!
      das mit den Tutorals über Joins und Normalisirung hatte ich sowieso vor...
      hast du einen Link den du mir empfehlen kannst? das was ich bisher gefunden hab taugt nicht recht viel, u.a. weil keine Syntaxregeln für die Abfragen dabei sind, noch auf solche "Probleme" wie meins eingegangen wird...

      Kommentar


      • #4
        Die Aussage von Hopka unterstütze ich. Such auch noch unter dem Stichwort "relationale Datenbank" und RDBMS.

        Vielleicht erinnert sich Hopka, woher er das gelernt hat. Ich jedenfalls weiss die Grundlagen von Kursen und Vorträgen. Ich muss zugeben, in meinen O'Reilly Büchenr über PHP finde ich das wesentliche (für diesen thread) auch nicht. Mein sonst bevorzugtes Buch, O'Reilly PHP Cookbook hat auf den ersten Blick keine Bsp mit mehr als einer Tabelle. Im O'Relly Programming PHP hat es EIN Beispiel mit Drei Tabellen, das könnte für Dich gehen. Das Buch findest du als pbook, als ebook und als emule : - >.
        Zuletzt geändert von globqluqqlo; 12.03.2006, 10:56.

        Kommentar


        • #5
          standardmässig würde die DB so aussehen

          Tabelle1 (Personen)
          ID
          Name
          Adresse

          Tabelle2 (Inhalte)
          InhaltID (ex Spalte)
          Inhalt

          Tabelle3 (Verknüpfung)
          vID
          personID
          InhaltID

          Jede Verknüpfung ist ein eigene Zeile in Tabelle3.

          Standardmässige Abfrage:
          Select Name, Adresse, Inhalt from T1, T2, T3
          where T3.personID = T1.ID and T3.InhaltId = T2.InhaltId.

          Kommentar


          • #6
            Also ich habe mir, als ich mit Datenbanken anfing, die Seite http://reeg.net größtenteils durchgelesen. Dort wird ganz gut der Umgang mit Datenbanken erklärt.
            hopka.net!

            Kommentar

            Lädt...
            X