查询需要很长时间才能在AWS RDS中执行

时间:2017-12-20 09:37:09

标签: mysql rds

我正在研究一些临时表进行练习。 一个查询花费了大约550秒的时间.Db在AWS RDS中托管,具有8cpu和16GB内存。 下面的查询必须在不同的DB(prod)中运行,首先检查test testDB

create table test_01 as  
 select * 
    from
        (
   select
    person
                ,age
                ,dob
                ,place
             from
     person
   where
     person is not null
                and age is not null
                and dob is not null
                and place is not null
    limit 1000
  ) ps_u
 left join
  employee em_u
  on ps_u.age = em_u.em_age
  and ps_u.place = em_u.location
 order by person
    limit 1000

查询或资源是否存在问题, CPU利用率显示30%ram可以不太多。 让我知道任何优化查询的建议。

4 个答案:

答案 0 :(得分:0)

  1. 检查左连接。它可能是一个原因。 left join将返回左表中的所有内容,如果此表有大量条目,则会降低查询速度。

  2. 有了它,您可以在两个单独的查询中解决查询问题。使用不同的调整来检查执行时间。

  3. 尝试返回特定行而不是*。

答案 1 :(得分:0)

你可以减少1个select语句/ left left join从左表中获取所有记录可能需要一些时间来处理数据。

CREATE TABLE test_01 AS
  (SELECT person,
          age,
          dob,
          place
   FROM person ps_u
   LEFT JOIN employee em_u ON ps_u.age = em_u.em_age
   AND ps_u.place = em_u.location
   ORDER BY ps_u.person
   WHERE ps_u.person IS NOT NULL
     AND ps_u.age IS NOT NULL
     AND ps_u.dob IS NOT NULL
     AND ps_u.place IS NOT NULL
   LIMIT 1000)

答案 2 :(得分:0)

如果您要限制结果(使用limit 1000) - 您真的需要order by person吗?如果结果很大 - order by会对性能产生负面影响。

答案 3 :(得分:0)

我通过为列

创建索引来解决它
alter table person
add fulltext index `fulltext`

    (
     , person asc
        , age asc
        , dob asc
        , place asc
    )
    ;

然后查询只需3秒即可获得1000条记录