Я работаю над некоторыми временными таблицами для практики. Один запрос занимает слишком много времени около 550 секунд. Db размещен в AWS RDS с 8cpu и 16GB RAM. Ниже запрос должен выполняться в разных БД (prod), сначала проверяя тест 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
Есть ли проблема с запросом или с ресурсом, загрузка процессора показывает, что 30% RAM не слишком много. Позвольте мне знать любое предложение по оптимизации запроса.
Я решил это, создав индекс для столбца
alter table person
add fulltext index 'fulltext'
(
, person asc
, age asc
, dob asc
, place asc
)
;
И тогда запрос занял всего 3 секунды для 1000 записей
Вы можете уменьшить 1 оператор select/также левое соединение, чтобы все записи из левой таблицы могли занять время для обработки данных.
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)
Если вы ограничиваете результат (с limit 1000
) - вам действительно нужен order by person
? Если результат огромен - order by
может отрицательно сказаться на производительности.
проверьте свое левое соединение. это может быть причиной для этого. left join вернет все из вашей левой таблицы, если эта таблица имеет много записей, это замедлит ваш запрос.
С его помощью вы можете разбить свой запрос на два отдельных запроса и проверить время выполнения, используя различные настройки.
Попробуйте вернуть определенные строки, а не *.