Сделайте запрос быстрее без нескольких соединений - PullRequest
1 голос
/ 23 мая 2019

Итак, в основном я выбираю несколько столбцов из нескольких представлений (точнее, 18 столбцов и 8 представлений). Общее время выполнения составляет примерно 36 минут. Я пытался очистить все, чтобы сделать его более читабельным, но теперь это занимает еще больше времени; 50 минут и вперед.

Вот пример того, что происходит:

    SELECT (18 columns)
           -- different cases happening here
    FROM view1 m
    left join  view2 dep  on --something        
    inner join view3 c on --something 
    inner join view4 cl on --something 
    inner join view5 cc on --something  
    inner join view6 cp on --something 
    inner join view7 mp on --something 
    inner join view8 ma on --something 

Я просто пытаюсь достать свои колонки, но они приходят из разных мест. Есть ли способ сделать это быстрее? Нужно ли создавать временную таблицу? И если да, то как мне это реализовать, чтобы увеличить скорость запроса?

Спасибо.

1 Ответ

1 голос
/ 23 мая 2019

Каждое объединение будет добавлять время / ресурсы к запросу, и когда вы присоединяетесь к представлениям, вы добавляете каждое присоединение в каждом представлении к вашему запросу.И для того, чтобы замедлить все остальное, достаточно одного неработающего представления.Я могу придумать три варианта:

  1. Избавьтесь от представлений и присоединитесь непосредственно к таблицам в них.Выбирайте только те объединения, которые вам нужны, и только те колонки, которые вам нужны.Убедитесь, что у каждого столбца в соединении есть индекс (т. Е. Для «FROM tbl1 JOIN tbl2 ON tbl1.SomeID1 = tbl2.SomeOtherID», убедитесь, что есть индекс для tbl1.SomeID1, и есть индекс для tbl2.SomeOtherID.
  2. Если вы можете работать со «старыми» данными, вы можете запустить запрос ночью и заполнить сводную таблицу, в которой вы можете выполнять запросы на следующий день. Посмотрите советы по созданию хранилища данных.
  3. Возьмите подсказки из № 1 выше и попробуйте оптимизировать каждое представление.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...