SELECT post_id FROM posts WHERE blog_id IN (15,16) ORDER BY post_id DESC
Post_id является PRIMARY, а blog_id - индексом, таблица - innoDB и DB MariaDB.SQL: Избегайте filesort, когда WHERE index IN (1,2) ORDER BY Primary
Это вызывает файловорт, поскольку в качестве ключа используется индекс blog_id. Blog_id должен быть индексом, когда я делаю запрос, ищущий только один blog_id = 15, это быстрее. Если blog_id это не индекс или я использую FORCE INDEX (PRIMARY), проблема решена, и запрос выполняется быстрее.
Дело в том, что я думаю, что вы не должны использовать FORCE INDEX для производственных приложений, а также USE INDEX? Это был бы первый вопрос, могу ли я заставить индекс и назвать его решенным?
Вторым вопросом было бы то, почему он здесь fileort. Если я правильно понимаю, индекс имеет два ключа, индексный ключ и первичный ключ, а индекс упорядочен первичным ключом? Думаю, не потому, что если бы это было так, то первый запрос должен был бы выполнять поиск по индексу и порядку с помощью первичного без filesort. Но он не использует filesort при поиске только одного идентификатора, и я не понимаю, почему он отличается от идентификаторов multiples. Поэтому я не знаю, почему это происходит.
См. Ответы на дублирующий запрос. –