Три стола:
product: с колонками: ( a, g, ...a_lot_more... )
a: PK, clustered
g: bit-column
main: с колонками: ( c, f, a, b, ...a_lot_more... )
c: PK, clustered
f: bit-column
(a, b): UQ
lookup с колоннами: ( a, b, c, i )
(a, b): PK, clustered
a: FK to product(a)
c: UQ, FK to main(c)
i: bit-column
Я не могу найти хорошие индексы для объединения:
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
Я примерил индекс покрытия, product (g, a, ...)и он используется, но не с впечатляющими результатами.
Некоторые комбинации индексов в lookupтаблице создают планы выполнения с объединением индексов с небольшим приростом эффективности по сравнению с предыдущим планом.
Есть ли какая-то очевидная комбинация, которую мне не хватает?
Может ли помочь реструктуризация конструкции?
СУБД - MySQL 5.5, и все таблицы используют InnoDB.
Размеры стола:
product: 67K , g applied: 64K
main: 420K , f applied: 190K
lookup: 12M , b,i applied: 67K