explain
select `bq_posts`.*
from `bq_posts`
where `bq_posts`.`entity_id` in (1, 2, 3, 4, 5)
and `bq_posts`.`post_type` in ('facebook', 'twitter', 'youtube', 'vevo', 'itunes', 'amazon', 'soundcloud', 'bit', 'ticketfly', 'festival', 'event', 'media')
order by `bq_posts`.`created_at` desc
limit 10 offset 0;
Второй день мучаюсь, помогите пожалуйста. У меня для этой таблицы есть индекс entity_id,post_type, есть наоборот post_type,entity_id. Но explain показывает что используется индекс posts_entity_id_amazon_asin_unique, keylen = 4, то есть используется только индекс для entity_id. Почему mysql так себя ведет? Если насильно установить индекс, который я хочу, запрос не ускоряется. В чем тут дело? entity_id = int(10), post_type = enum.
UPD: если в post_type in () оставить только одно значение, например только 'facebook', то все становится хорошо. То же самое, если в entity_id оставить только одно число.
Помогите, пожалуйста!
UPD2:
Explain:
mysql> explain
-> select `bq_posts`.*
-> from `bq_posts`
-> where `bq_posts`.`entity_id` in (1, 2, 3, 4, 5)
-> and `bq_posts`.`post_type` in ('facebook', 'twitter', 'youtube', 'vevo', 'itunes', 'amazon', 'soundcloud', 'bit', 'ticketfly', 'festival', 'event', 'media')
-> order by `bq_posts`.`created_at` desc
-> limit 10 offset 0 \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: bq_posts
partitions: NULL
type: range
possible_keys: posts_entity_id_amazon_asin_unique,posts_entity_id_festival_id_unique,posts_entity_id_post_type_is_duplicate_deleted_index,full_index,entity_id_created_at_post_type_is_duplicate
key: posts_entity_id_amazon_asin_unique
key_len: 4
ref: NULL
rows: 496
filtered: 50.00
Extra: Using index condition; Using where; Using filesort
1 row in set, 1 warning (0.00 sec)