Выполнение запроса занимает много времени в AWS RDS

0

Я работаю над некоторыми временными таблицами для практики. Один запрос занимает слишком много времени около 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 не слишком много. Позвольте мне знать любое предложение по оптимизации запроса.

Теги:
rds

4 ответа

0

Я решил это, создав индекс для столбца

alter table person
add fulltext index 'fulltext'

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

И тогда запрос занял всего 3 секунды для 1000 записей

0

Вы можете уменьшить 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)
  • 0
    Приведенный выше запрос также занимает одинаковое количество времени, все типы данных столбца имеют текст
0

Если вы ограничиваете результат (с limit 1000) - вам действительно нужен order by person? Если результат огромен - order by может отрицательно сказаться на производительности.

0
  1. проверьте свое левое соединение. это может быть причиной для этого. left join вернет все из вашей левой таблицы, если эта таблица имеет много записей, это замедлит ваш запрос.

  2. С его помощью вы можете разбить свой запрос на два отдельных запроса и проверить время выполнения, используя различные настройки.

  3. Попробуйте вернуть определенные строки, а не *.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню