Size: a a a

2021 June 09

AN

Alexey Novoselov in pro.elixir
источник

B

Bogdan in pro.elixir
Дергать все не лучший вариант, я так делал но уже перегружается сервис. Там дальше тяжелый matching идет, и каждый раз матчить данные которые уже были ранее сматчены для A не подходит, поэтому сделал last_id и вроде бы все стало гораздо лучше. Но теперь бы еще как-то N + 1 этот убрать)
источник

B

Bogdan in pro.elixir
сейчас гляну
источник

B

Bogdan in pro.elixir
похоже что подходит, сейчас опробую.
источник

AB

Alex Bubnov in pro.elixir
можно опять же cte https://stackoverflow.com/a/51624369
но всё еще представления не имею, как это писать в экто
источник

AB

Alex Bubnov in pro.elixir
может быть можно и без cte, кстати
источник

B

Bogdan in pro.elixir
theta join похоже что для этого создан
источник

AB

Alex Bubnov in pro.elixir
так, это кажется не совсем то
источник

AD

Anastasiya Dyachenko in pro.elixir
window functions наверно ближе
источник

B

Bogdan in pro.elixir
а куда фрагмент запихать theta join? в where?
источник

AN

Alexey Novoselov in pro.elixir
https://hexdocs.pm/ecto/Ecto.Query.html#with_cte/3 но тут тета соединения хватит, да и цте могут перфоманс садить сильно в зависимости от положения марса в деве или в весах
источник

AD

Anastasiya Dyachenko in pro.elixir
а какая бд у тебя
источник

B

Bogdan in pro.elixir
Postgres
источник

AD

Anastasiya Dyachenko in pro.elixir
я в postgres не вижу theta join в том виде в котором имеется в виду
источник

AB

Alex Bubnov in pro.elixir
ну, я наоборот использовал cte, чтобы у меня оптимизатор поцгреса не умничал и не садил производительность.
правда, с тех пор что-то вроде поменялось.
источник

IB

Ilya Borovitinov in pro.elixir
Если нужен лимит на каждый last_id, то в постгре можно через lateral join вроде
источник

AD

Anastasiya Dyachenko in pro.elixir
cross join мб оно?
источник

B

Bogdan in pro.elixir
вроде нет, судя по доке theta join подходит.
источник

IB

Ilya Borovitinov in pro.elixir
SELECT a.last_id, b.* FROM a CROSS  JOIN LATERAL (SELECT * FROM b WHERE b.id > a.last_id LIMIT 3500 ORDER BY b.id)
источник

IB

Ilya Borovitinov in pro.elixir
В экто cross_join: b in fragment("LATERAL ?", subqury) работает
источник