Возможно я сильно не прав, но вполне можно обстрагироваться от этих понятий, и считать что там хранится два столбца с целыми числами и индекс сделать полностью покрывающий не получается не из за них, а из за group by и order by.
Про использован и не использован просто опечатка программиста, не более того.
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Ad index_merge category_id,category,city_id,citycategory,forcateg… category_id,forcategory 5,19 NULL 2538 Using intersect(category_id,forcategory); Using wh…
Как посмотреть селективность составного индекса?
Есть индекс составной city_id++ category+status+category_id+posting_date
есть отдельный по posting_date
Значит что category равно четырем, а category_id равно 33.
Если вас смущает 'Ad'.
это сверху есть FROM `daype_ads` AS `Ad`
Вполне возможно что я не понял ваш вопрос и ответил чепуху.
Упрощу запрос до такого
EXPLAIN SELECT Ad.id, Ad.title, Ad.description, Ad.posting_date, Ad.is_colored_listing, Ad.bg_color, Ad.fg_color
FROM `daype_ads` AS `Ad`
WHERE `city_id` =25
AND `Ad`.`category` =4
AND `Ad`.`status` =1
AND `category_id` =33
GROUP BY `Ad`.`id`
ORDER BY `posting_date` DESC
LIMIT 20, 20
explain говорит что использует индекс по category_id и составной по city_id++ category+status+category_id
но все равно работает не очень быстро.