Trois tables:
product
: avec colonnes: ( a, g, ...a_lot_more... )
a: PK, clustered
g: bit-column
main
: avec colonnes: ( c, f, a, b, ...a_lot_more... )
c: PK, clustered
f: bit-column
(a, b): UQ
lookup
avec des colonnes: ( a, b, c, i )
(a, b): PK, clustered
a: FK to product(a)
c: UQ, FK to main(c)
i: bit-column
Je ne trouve pas de bons index pour la jointure:
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
J'ai essayé un indice de couverture product (g, a, ...)
et il est utilisé mais pas avec des résultats spectaculaires.
Certaines combinaisons d'index sur la lookup
table produisent des plans d'exécution avec fusion d'index, avec un léger gain d'efficacité par rapport au plan précédent.
Y a-t-il une combinaison évidente qui me manque?
Une refonte de la structure pourrait-elle aider?
Le SGBD est MySQL 5.5 et toutes les tables utilisent InnoDB.
Tailles de table:
product: 67K , g applied: 64K
main: 420K , f applied: 190K
lookup: 12M , b,i applied: 67K