Tres mesas:
product
: con columnas: ( a, g, ...a_lot_more... )
a: PK, clustered
g: bit-column
main
: con columnas: ( c, f, a, b, ...a_lot_more... )
c: PK, clustered
f: bit-column
(a, b): UQ
lookup
con columnas: ( a, b, c, i )
(a, b): PK, clustered
a: FK to product(a)
c: UQ, FK to main(c)
i: bit-column
No puedo encontrar buenos índices para la unión:
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
Intenté un índice de cobertura product (g, a, ...)
y se usa pero no con resultados espectaculares.
Algunas combinaciones de índices en la lookup
tabla producen planes de ejecución con fusión de índice, con una ligera ganancia de eficiencia sobre el plan anterior.
¿Hay alguna combinación obvia que me estoy perdiendo?
¿Podría ayudar un rediseño de la estructura?
El DBMS es MySQL 5.5 y todas las tablas están usando InnoDB.
Tamaños de mesa:
product: 67K , g applied: 64K
main: 420K , f applied: 190K
lookup: 12M , b,i applied: 67K