Tiga tabel:
product
: dengan kolom: ( a, g, ...a_lot_more... )
a: PK, clustered
g: bit-column
main
: dengan kolom: ( c, f, a, b, ...a_lot_more... )
c: PK, clustered
f: bit-column
(a, b): UQ
lookup
dengan kolom: ( a, b, c, i )
(a, b): PK, clustered
a: FK to product(a)
c: UQ, FK to main(c)
i: bit-column
Saya tidak dapat menemukan indeks yang baik untuk bergabung:
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
Saya mencoba indeks penutup product (g, a, ...)
dan itu digunakan tetapi tidak dengan hasil yang spektakuler.
Beberapa kombinasi indeks di atas lookup
meja menghasilkan rencana eksekusi dengan gabungan indeks, dengan sedikit peningkatan efisiensi dibandingkan rencana sebelumnya.
Apakah ada kombinasi jelas yang saya lewatkan?
Bisakah desain ulang struktur membantu?
DBMS adalah MySQL 5.5 dan semua tabel menggunakan InnoDB.
Ukuran meja:
product: 67K , g applied: 64K
main: 420K , f applied: 190K
lookup: 12M , b,i applied: 67K