与本地 mysql 安装相比,RDS 性能较慢

与本地 mysql 安装相比,RDS 性能较慢

我在 AWS 上有一个运行基本配置的 RDS 服务器 (rd3.medium)。我尝试运行此查询,它在几毫秒内在我的本地计算机上运行,​​以及一个安装了 MySQL 服务器的基本 Web 服务器。但是,当我在 RDS 上运行它时,需要20秒。我正在使用通用配置 SSD 作为存储。

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 会让速度慢这么多。

答案1

所以我找到了答案。问题是由于查询设计不当造成的。(此查询来自 Wordpress 插件,因此这并不奇怪)。第三个连接不仅毫无价值,而且还附加了“创建”1 条记录在结果集中,用于 Post Meta 表中每条将 wpcr3_enable 设置为 1 * WP Post 表中每条记录,从而产生 500,000 行。我相信本地速度只是发送/处理该数据的问题。添加的 DISTINCT 关键字只是掩盖了这个问题,在正确编码的查询中实际上是不必要的。

相关内容