Создайте составной индекс CREATE INDEX index_posts ON user_posts(owner_id,created).
Удалите все результаты запросов из кэша запросов. И попробуйте выполнить Ваш запрос:
SELECT post_id, owner_id, content_text, location_name, provider_id, provider_source_id, provider_source_id_full, provider_source_domain, provider_source_link, provider_source_name, provider_source_photo, provider_post_link, attachment_0_photo, created
FROM user_posts
WHERE owner_id='30'
ORDER BY created DESC
LIMIT 20;
Рассмотрим такой запрос:
SELECT * FROM users WHERE age = 29 AND gender = 'male'
Нам следует создать составной индекс на обе колонки:
CREATE INDEX age_gender ON users(age, gender);
Устройство составного индекса
Чтобы правильно использовать составные индексы, необходимо понять структуру их хранения. Все работает точно так же, как и для обычного индекса. Но для значений используются значений всех входящих колонок сразу. Для таблицы с такими данными:
id | name | age | gender
1 | Den | 29 | male
2 | Alyona | 15 | female
3 | Putin | 89 | tsar
4 | Petro | 12 | male
значения составного индекса будут такими:
age_gender
12male
15female
29male
89tsar
Это означает, что очередность колонок в индексе будет играть большую роль. Обычно колонки, которые используются в условиях WHERE, следует ставить в начало индекса. Колонки из ORDER BY — в конец.