equin: Verknüpfung sehr großer Tabellen unmöglich?

Hallo ich habe zwei Tabellen mit jeweils ca 45 000 Einträgen.

Wenn ich diese jetzt mit INNER JOIN verbinden will geht das bei einem eintrag grade noch (dauert ein paar Sekunden)

SELECT a.fel1, b.feld2 FROM a INNER JOIN b ON a.id = b.id WHERE id='1'

Aber wenn ich jetzt mehrere Einträge habe dauert es halt immer länger

SELECT a.fel1, b.feld2 FROM a INNER JOIN b ON a.id = b.id WHERE id='1' OR id = '2' OR id = '3'

Kann ich die Abfrage irgendwie besser stellen oder sind die Tabellen einfach zu groß?

  1. Moin!

    Wenn ich diese jetzt mit INNER JOIN verbinden will geht das bei einem eintrag grade noch (dauert ein paar Sekunden)

    Was darauf hindeutet, dass du keinen passenden Index definiert hast.

    Aber wenn ich jetzt mehrere Einträge habe dauert es halt immer länger

    Was noch mehr darauf hindeutet.

    Lass dir die Abfrage und die verwendeten Indices mal durch ein vorangestelltes EXPLAIN erklären. Dann siehst du mehr. Das MySQL-Handbuch bietet außerdem auch Infos zur Optimierung von Abfragen.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Moin!

      Wenn ich diese jetzt mit INNER JOIN verbinden will geht das bei einem eintrag grade noch (dauert ein paar Sekunden)

      Was darauf hindeutet, dass du keinen passenden Index definiert hast.

      Was meinst du mit keinen passenden Index? Keinen eindeutigen? Also um genaus zu sein, ist es ein zusammengesetzter Index der sich aus mehreren Feldern zusammensetzt. Kann das ein problem sein?

      Aber wenn ich jetzt mehrere Einträge habe dauert es halt immer länger

      Was noch mehr darauf hindeutet.

      Lass dir die Abfrage und die verwendeten Indices mal durch ein vorangestelltes EXPLAIN erklären. Dann siehst du mehr. Das MySQL-Handbuch bietet außerdem auch Infos zur Optimierung von Abfragen.

      Danke, werd das später mal testen

      1. Moin!

        Wenn ich diese jetzt mit INNER JOIN verbinden will geht das bei einem eintrag grade noch (dauert ein paar Sekunden)

        Was darauf hindeutet, dass du keinen passenden Index definiert hast.

        Was meinst du mit keinen passenden Index? Keinen eindeutigen? Also um genaus zu sein, ist es ein zusammengesetzter Index der sich aus mehreren Feldern zusammensetzt. Kann das ein problem sein?

        Ein Index ist eine zusätzliche Spalteninformation in der Datenbank, in der diese sich Schnellzugriffsinformationen auf die einzelnen Datensätze speichert. Das hat erstmal nichts mit Verknüpfungen zwischen verschiedenen Tabellen zu tun.

        Wenn du unbedingt mehrere Spalten zu einem Index verknüpfen mußt (wovon ich eindeutig abraten würde - das passiert meist deshalb, weil du deinen Indexspalten mehr Bedeutung gibst als nur "irgendeine ID"), dann müßte halt auch ein passender Index mehrspaltig angelegt werden.

        Lass dir die Abfrage und die verwendeten Indices mal durch ein vorangestelltes EXPLAIN erklären. Dann siehst du mehr. Das MySQL-Handbuch bietet außerdem auch Infos zur Optimierung von Abfragen.

        Danke, werd das später mal testen

        Antworten dieser Art hasse ich. Gib Feedback, wenn du es getestet HAST und zum Erfolg gekommen bist ("Danke, hat funktioniert. $details..."), oder wenn noch Erklärungsbedarf herrscht. Alles andere suggeriert "Naja, ist mir nicht so wichtig, ob das Forum sich reingehängt hat mit seiner Hilfe".

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. yo,

          Ein Index ist eine zusätzliche Spalteninformation in der Datenbank, in der diese sich Schnellzugriffsinformationen auf die einzelnen Datensätze speichert.

          ein index ist eher ein eigenes objekt in einer datenbank und weniger eine "zusätzliche spalteninformation", mit einer referenz auf den ursprünglichen datensatz und einer sortierung, die eben den schnellen zugriff ermöglicht, da in gegensatz zum index objekten, das tabellen objekt unsortiert vorliegt.

          Wenn du unbedingt mehrere Spalten zu einem Index verknüpfen mußt (wovon ich eindeutig abraten würde - das passiert meist deshalb, weil du deinen Indexspalten mehr Bedeutung gibst als nur "irgendeine ID"), dann müßte halt auch ein passender Index mehrspaltig angelegt werden.

          in index über mehrere spalten macht sehr wohl sinn und die gründe für die verwendung liegen auch nicht in der inhaltlichen bedeutung von indexpalten. auch sind indexe über nicht schlüsselspalten ein ganz normaler vorgang.

          Ilja