Apakah pertanyaan Anda termasuk ORDER BY … LIMIT klausa?
Jika Anda memasukkan ORDER BY … LIMIT setelah UNION , itu diterapkan ke seluruh UNION , dan indeks tidak dapat digunakan dalam kasus ini.
Jika id adalah kunci utama, kueri ini akan instan:
SELECT *
FROM table
ORDER BY id
LIMIT 1
, tapi yang ini tidak akan:
SELECT *
FROM table
UNION ALL
SELECT *
FROM table
ORDER BY id
LIMIT 1
Ini juga tampaknya disebabkan oleh ORDER BY . Menyortir kumpulan yang lebih kecil lebih cepat daripada yang lebih besar.
Apakah Anda memerlukan set yang dihasilkan untuk diurutkan?
Jika tidak, singkirkan ORDER BY terakhir .