我正在研究一些临时表进行练习。 一个查询花费了大约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可以不太多。 让我知道任何优化查询的建议。
答案 0 :(得分:0)
检查左连接。它可能是一个原因。 left join将返回左表中的所有内容,如果此表有大量条目,则会降低查询速度。
有了它,您可以在两个单独的查询中解决查询问题。使用不同的调整来检查执行时间。
尝试返回特定行而不是*。
答案 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条记录