Назад | Перейти на главную страницу

Производительность RDS низкая по сравнению с локальной установкой mysql

У меня есть сервер RDS (rd3.medium) на AWS, на котором выполняется базовая конфигурация. Я пытаюсь выполнить этот запрос, который выполняется за несколько миллисекунд на моем локальном компьютере, а также на базовом веб-сервере, на котором у меня установлен сервер MySQL. Однако, когда я запускаю его на RDS, требуется 20 секунд. Я использую твердотельные накопители General Provisioned для хранения.

SELECT DISTINCT
        p2.id
    FROM
        wp_posts p2
    INNER JOIN
        wp_postmeta pm2
        ON
            pm2.meta_key = 'wpcr3_review_post'
            AND
            pm2.post_id = p2.id

    INNER JOIN
        wp_posts p3
        ON
            p3.id = pm2.meta_value
            AND
            p3.post_status = 'publish'
    INNER JOIN
        wp_postmeta pm3
        ON
            pm3.meta_key = 'wpcr3_enable'
            AND
            pm3.meta_value = '1'

    WHERE
        p2.post_type = 'wpcr3_review'

Я заметил, когда бежал EXPLAIN что он использует временную таблицу, и поэтому мне интересно, есть ли какой-то способ, которым RDS не справляется так хорошо, в то время как базовая установка сервера MySQL делает?

1   SIMPLE  pm3 ref meta_key    meta_key    576 const   334 Using where; Using temporary
1   SIMPLE  pm2 ref post_id,meta_key    meta_key    576 const   1335    Using where
1   SIMPLE  p2  eq_ref  PRIMARY,type_status_date    PRIMARY 8   deaddictioncentres_staging.pm2.post_id  1   Using where
1   SIMPLE  p3  eq_ref  PRIMARY PRIMARY 8   deaddictioncentres_staging.pm2.meta_value   1   **Using index condition;** Using where; Distinct

Единственное отличие, которое я обнаружил на всех других серверах, это то, что сервер RDS добавляет Использование условия индекса; где никто из других не делает.

Обновить Я узнал разницу Использование условия индекса; был связан с переходом с 5.5 на 5.6. Но я не могу понять, почему переход с 5.5 на 5.6 сделает работу намного медленнее.

Вот и я понял ответ. Проблема была в неправильном дизайне запроса. (Этот запрос исходил из плагина Wordpress, поэтому это неудивительно). Третье соединение было не только бесполезным, оно добавляло «создание» 1 записи в результирующий набор для каждой записи в мета-таблице Post, для которой для wpcr3_enable было установлено значение 1 * для каждой записи в таблице WP Post, в результате получалось 500 000 строк. Я считаю, что скорость на локальном уровне была просто проблемой с отправкой / обработкой этих данных. Добавленное ключевое слово DISTINCT просто скрывает проблему и фактически не требуется в правильно закодированном запросе.