Производительность вывода условия фильтра - PullRequest
0 голосов
/ 19 сентября 2019

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

У меня есть пример таблицы - date_dim: которая всегда будет содержать только 1 записьОтносительно текущей даты исполнения:

dt | frst_day_mth | last_day_mth
16/05/2019 | 01/05/2019 | 31/05/2019  -- Table always has only 1 row for that day

Теперь у меня есть запрос типа:

select a.id, b.name, c.salary
from tableA a
inner join tableB b
on a.id = b.id
inner join tableC c
on b.name = c.name

Теперь я должен применить условие фильтра даты, например tableA.eff_dt <= date_dim.last_mth_day.У меня вопрос - какой вариант (ниже) будет лучшим с точки зрения производительности?Лучше ли поместить его в ON clause в Join (вариант 1) с subquery, чтобы записи могли быть сокращены раньше, или применить его позже в предложении where (вариант 2)?Таблицы A, B & C имеют около 20 строк Mil.Я использую Spark SQL.

Вариант 1:

select a.id, b.name, c.salary
from tableA a
inner join tableB b
on a.id = b.id
and a.eff_dt <= (select last_mth_day from date_dim) -- Using subquery early on
inner join tableC c
on b.name = c.name 

Вариант 2:

select a.id, b.name, c.salary
from tableA a
inner join tableB b
on a.id = b.id
inner join tableC c
on b.name = c.name
cross join date_dim dt 
where a.eff_dt <= dt.last_mth_day -- Using Later in WHERE clause

Пожалуйста, дайте мне знать ваши комментарии.

1 Ответ

0 голосов
/ 26 сентября 2019

Поскольку ваш запрос похож на фильтр строк из таблицы tableA, основанный на единственном значении в таблице - date_dim.

Так что я считаю, что когда бы вы ни держали фильтр, оптимизатор поисковых запросов читает толькостроки из таблицы A, которые соответствуют условию фильтра (это происходит из-за механизма фильтра с понижением)Таким образом, в соединении участвуют только эти строки.

Вы можете обратиться по этой ссылке для получения дополнительной информации: https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-Optimizer-PushDownPredicate.html

...