Três mesas:
product
: com colunas: ( a, g, ...a_lot_more... )
a: PK, clustered
g: bit-column
main
: com colunas: ( c, f, a, b, ...a_lot_more... )
c: PK, clustered
f: bit-column
(a, b): UQ
lookup
com colunas: ( a, b, c, i )
(a, b): PK, clustered
a: FK to product(a)
c: UQ, FK to main(c)
i: bit-column
Não consigo encontrar bons índices para a associação:
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
Eu tentei um índice de cobertura product (g, a, ...)
e ele é usado, mas não com resultados espetaculares.
Algumas combinações de índices na lookup
tabela produzem planos de execução com mesclagem de índices, com leve ganho de eficiência em relação ao plano anterior.
Existe alguma combinação óbvia que estou perdendo?
Um re-design da estrutura poderia ajudar?
O DBMS é o MySQL 5.5 e todas as tabelas estão usando o InnoDB.
Tamanhos da tabela:
product: 67K , g applied: 64K
main: 420K , f applied: 190K
lookup: 12M , b,i applied: 67K