Я пытаюсь улучшить производительность забитого Wordpress DB, добавив индексы к запросам, которые появляются в журнале медленных запросов.Как заставить запрос в MySQL использовать индекс?
В MS SQL можно использовать запрос подсказок, чтобы заставить запрос использовать индекс, но это, как правило, довольно легко получить запрос использовать индекс, если вы покрываете столбцы правильно и т.д.
У меня есть этот запрос который появляется в медленном запросе войти намного
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish')
ORDER BY wp_posts.post_date DESC
LIMIT 18310, 5;
Я создал охватывающую уникальный индекс wp_posts
на post_date, post_status, post_type and post_id
и перезапустить MySQL, однако, когда я бегу объяснить индекс используется
status_password_id
и возможных ключей мой новый индекс даже не появляется, хотя это индекс покрытия, например, я просто получить
type_status_date,status_password_id
Поэтому ни использовали индекс или возможные варианты «оптимизатора», если MySQL имеет один даже учитывая мой индекс, который имеет post_date в качестве первого столбца. Я бы подумал, запрос, который в основном делает верхний и упорядочивание по дате с
ORDER BY wp_posts.post_date DESC LIMIT 18310, 5;
Хочет ли использовать индекс, отсортированный по дате скорости, особенно тот, который имел все другие поля, необходимые для выполнения запроса в это также?
Имеет ли MySQL подсказки для запроса, чтобы использовать индекс для тестов скорости/производительности или есть что-то еще, что мне нужно сделать, чтобы понять, почему этот индекс игнорируется.
Мне очень понравилось бы, если Navicat имел план выполнения Visual Query, такой как MS SQL, но кажется, что EXPLAIN - лучшее, что он может предложить.
Любой, у кого есть какие-либо намеки на то, как я могу заставить индекс использовать или работать, почему его игнорирование будет очень полезно!
Благодаря
вы можете попробовать изменить порядок указателя def wp_posts на 'post_type, post_status, post_date, post_id' –
@IanKenney, вы должны разместить это как ответ. Этот индекс будет использоваться (никаких подсказок не требуется), и запрос будет таким же эффективным, как он может получить (с учетом довольно большого смещения). –