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 .