Announcement

Collapse
No announcement yet.

Index über mehrere Tabellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Index über mehrere Tabellen

    Hallo Miteinander,

    ich habe folgende Tabellen

    CREATE TABLE `test`.`kunden` (
    `kunden_id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `kunden_vorname` VARCHAR( 25 ) NOT NULL ,
    `kunden_nachname` VARCHAR( 25 ) NOT NULL
    ) ENGINE = MYISAM ;

    CREATE TABLE `test`.`optionen` (
    `option_id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `option_beschreibung` VARCHAR( 100 ) NOT NULL
    ) ENGINE = MYISAM ;

    CREATE TABLE `test`.`kunden_optionen` (
    `kunden_id` MEDIUMINT UNSIGNED NOT NULL ,
    `option_id` SMALLINT UNSIGNED NOT NULL ,
    `option_wert` VARCHAR( 10 ) NOT NULL
    ) ENGINE = MYISAM ;

    Angenommen es sind 2000 Kunden, von denen sich jeder aus 500 möglichen Optionen je 100 Stück Auswählt. Dann hätte die Tabelle kunden_optionen 20000 Einträge.

    Eine Abfrage würde zum Beispiel so aussehen:

    SELECT optionen.option_beschreibung, kunden_optionen.option_wert
    FROM `kunden_optionen`
    LEFT JOIN optionen ON optionen.option_id = kunden_optionen.option_id
    WHERE kunden_id = '1'

    oder so

    SELECT optionen.option_beschreibung, kunden_optionen.option_wert
    FROM optionen, `kunden_optionen`
    WHERE kunden_id = '1'
    AND optionen.option_id = kunden_optionen.option_id

    Nun meine Frage, sollte man in der Tabelle kunden_option einen Index erstellen? Ich denke das die Tabelle bereits durch die kunden_id und option_id indiziert sein müßte.

  • #2
    Hallo,
    Originally posted by flashbanane View Post
    ...sollte man in der Tabelle kunden_option einen Index erstellen? Ich denke das die Tabelle bereits durch die kunden_id und option_id indiziert sein müßte.
    Nein, woraus folgerst du dass? Im Create-Statement ist kein Constraint beschrieben und von alleine legt der MySQL-Server keine Indizes an.
    Für die beschriebenen Abfragen würde sich ein zusammengesetzter Index (kunden_id, option_id) auf der Tabelle anbieten.
    Wenn ein Kunde (kunden_id) eine bestimmte Option (option_id) nur ein einziges Mal haben kann, dann wäre sogar ein UNIQUE KEY sinnvoll.

    Gruß falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Danke falk,

      habe deinen Rat befolgt.
      Ich dachte das MySql anhand der Abfrage die Beziehungen erkennt.
      Mit den Index bemerkt man deutlich eine Verbesserung der geschwindigkeit.

      lg

      Comment

      Working...
      X