index über mehrere Spalten

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

  • index über mehrere Spalten

    Hallo zusammen,

    mein Problem ist folgendes:

    Ich habe eine Tabelle 'produkt' mit den Spalten 'name' und 'kategorie'.

    Da ein Produkt mehreren Kategorien angehören kann stehen in der Spalte 'kategorie' mehrere Kategorien durch ein Semikolon voneinander getrennt.
    Die Daten eines Produktes sind also etwa:

    name: Bär
    kategorie: bunt;klein

    Code:
    select name from produkt where kategorie like '%klein%';
    liefert mir also die Produkte der Kategorie 'klein'.

    Jetzt wollte ich auf die Spalte 'kategorie' zwecks Perfomance-Steigerung einen Index legen.
    Der wird aber nicht verwendet wegen des ersten % in '%klein%'.

    Also habe ich die Tabellen-Struktur verändert.
    Jetzt hat die Tabelle die Spalten 'name', 'kategorie1' und 'kategorie2',
    Ein Produkt sieht jetzt etwa so aus:

    name: Bär
    kategorie1: bunt
    kategorie2: klein

    Code:
     select name from produkt where kategorie1 = 'klein' or kategorie2 = 'klein';
    liefert mir jetzt die Produkte der Kategorie 'klein'.

    Ich habe einen Index auf 'kategorie1', einen auf 'kategorie2' und einen auf (kategorie1 kategorie2) gelegt.

    Wieder wird kein Index verwendet.

    Daher meine Frage:
    Wie kann ich erreichen, dass ein Produkt mehreren Kategorien angehören kann und beim select ein Index verwendet wird.
    Nätürlich möchte ich nur ein einziges select hierfür verwenden.

    Danke schon mal

  • #2
    Re: index über mehrere Spalten

    Also habe ich die Tabellen-Struktur verändert.
    Jetzt hat die Tabelle die Spalten 'name', 'kategorie1' und 'kategorie2',
    OffTopic:
    wenn du schon die tabellenstrukturen anpaßt, mach es doch gleich richtig. was machst du, wenn ein produkt in 17 kategorien gehört?
    Wie kann ich erreichen, dass ein Produkt mehreren Kategorien
    - tab product (id, cat_id, ...)
    - tab cats (id, props, ...)
    - tab prod_cat_relation (id, id_prod, id_cat)

    was spricht gegen eine solche db-struktur?
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Re: Re: index über mehrere Spalten

      Hi,

      ja klar, aber ich wollte ja mit nur einem select die Produkte. Bei Deinem Vorschlag :

      - tab product (id, cat_id, ...)
      - tab cats (id, props, ...)
      - tab prod_cat_relation (id, id_prod, id_cat)
      brauche ich ja wieder mehrere selects. Das wollte ich ja vermeiden.

      Kommentar


      • #4
        du kannst mit JOINs arbeiten: http://www.php-resource.de/forum/sho...threadid=28292

        dann hättest du auch nur ein SELECT
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          OK danke,

          dann werde ich auf 'prod_cat_relation.id_cat' und product.id einen Index legen und schauen ob alles funktioniert.

          Kommentar

          Lädt...
          X