Drei Tabellen:
product
: mit Spalten: ( a, g, ...a_lot_more... )
a: PK, clustered
g: bit-column
main
: mit Spalten: ( c, f, a, b, ...a_lot_more... )
c: PK, clustered
f: bit-column
(a, b): UQ
lookup
mit Spalten: ( a, b, c, i )
(a, b): PK, clustered
a: FK to product(a)
c: UQ, FK to main(c)
i: bit-column
Ich kann keine guten Indizes für den Join finden:
FROM
product
JOIN
lookup
ON lookup.a = product.a
JOIN
main
ON main.c = lookup.c
WHERE
product.g = 1
AND
main.f = 1
AND
lookup.i = 1
AND lookup.b = 17
Ich habe einen Covering-Index ausprobiert product (g, a, ...)
und er wird verwendet, aber nicht mit spektakulären Ergebnissen.
Einige Kombinationen von Indizes in der lookup
Tabelle erzeugen Ausführungspläne mit Indexzusammenführung mit einem leichten Effizienzgewinn gegenüber dem vorherigen Plan.
Gibt es eine offensichtliche Kombination, die mir fehlt?
Könnte eine Neugestaltung der Struktur helfen?
Das DBMS ist MySQL 5.5 und alle Tabellen verwenden InnoDB.
Tischgrößen:
product: 67K , g applied: 64K
main: 420K , f applied: 190K
lookup: 12M , b,i applied: 67K