Saya pernah mengalami masalah ini sebelumnya. Ini analisa saya.
-
Itu terjadi di MySQL 5.7 dan 8.0, tetapi tampaknya tidak di versi yang lebih lama dan tidak di MariaDB.
-
"Solusi" yang saya sukai adalah mengubah indeks sebagai berikut:
INDEX(company_id) -- DROP this INDEX(company_id, id) -- ADD this
Meskipun indeks 2 kolom secara teoritis identik dengan indeks satu kolom untuk InnoDB (dengan asumsi id
adalah PK`), Pengoptimal tampaknya mengabaikan fakta ini dalam beberapa situasi .
Juga, saya ingin secara eksplisit menambahkan PK ketika saya melihat kebutuhan . Ini menandakan pembaca skema di masa mendatang (termasuk saya sendiri) bahwa beberapa kueri mendapat manfaat dari PK yang ditambahkan.
Saya belum menemukan kasus di mana "penggabungan indeks berpotongan" lebih cepat daripada indeks komposit yang setara.
Saya tidak suka menggunakan "petunjuk" indeks karena takut distribusi data akan berubah di masa mendatang dan "petunjuk" saya akan memperburuk keadaan.