Indeks pada categoryId tidak akan membantu dalam kasus ini, kueri IN (...) akan menghasilkan pemindaian urutan alih-alih pencarian indeks.
Saya akan mempertimbangkan untuk mendesain ulang sistem terlebih dahulu untuk menyingkirkan beberapa pemilihan kategori dan jika tidak sesuai, menyimpan hasil kueri.
Misalnya, Anda dapat membuat tabel pembantu items_category_groups(hash, item_id) dan setelah permintaan klien pada beberapa kategori meng-hash id gabungan mereka dan mencari tabel ini. Jika tidak ditemukan, buat kueri mahal dan isi tabel ini. Jika ditemukan, buat kueri murah untuk bergabung dengan tabel ini. Alat caching lainnya seperti memcached juga akan berfungsi.