184 похожих чатов

Привет всем. Есть такой запрос: SELECT match_id, user_id FROM match_users

JOIN matches USING match_id WHERE match_id = 321. Можно ли заставить кликхаус не выгружать всю таблицу в память, а отдельными запросами получить только нужную запись из matches?

P. S. Предполагается, что в match_users при выборке с match_id количество записей будет не больше 5

12 ответов

27 просмотров

А пробывал джойнить запрос ?

МСМК- Автор вопроса
Константин
А пробывал джойнить запрос ?

а-ля SELECT match_id, user_id FROM match_users JOIN (SELECT * FROM matches WHERE matches.match_id = match_users.match_id) WHERE match_id = 321?

МСМК
а-ля SELECT match_id, user_id FROM match_users JOI...

Ну если тебе нужен 321, то ты можешь matches.match_id =321

МСМК- Автор вопроса
Константин
Ну если тебе нужен 321, то ты можешь matches.match...

В данном случае мне действительно нужен только 321. Но есть ситуации, когда нужен подобный запрос: SELECT match_id, user_id FROM match_users JOIN matches USING match_id WHERE user_id = 1 и тогда уже начинаются проблемы

МСМК- Автор вопроса
МСМК
В данном случае мне действительно нужен только 321...

Проблемы такого рода, что при выборке по match_users.user_id в основном не более 1000 записей и быстрее их кодом в цикле обойти и получить отдельно каждый matches.match_id, чем дожидаться пока кликхаус join выполнит

МСМК
В данном случае мне действительно нужен только 321...

Я бы сказал, что тогда у вас схема хранения не правильная. https://www.youtube.com/watch?v=y8HsXqQEyfE , не помню на какой минуте, но требуется денормализация данных если вы храните их как таблицы. Если таблица не большая, то можно попробывать словарь для неё сделать.

МСМК- Автор вопроса
Константин
Я бы сказал, что тогда у вас схема хранения не пра...

Спасибо, ознакомлюсь. Проблема как раз в том, что таблица уже достаточно большая (около 400 гигабайт) и выгружать её в оперативку для такого запрос дорого и долго

МСМК
Спасибо, ознакомлюсь. Проблема как раз в том, что ...

Ну так она же не полностью выгружается, а только требуемые столбцы.

МСМК- Автор вопроса
Константин
Ну так она же не полностью выгружается, а только т...

Шутка в том, что выгружается почти полностью. Когда планировал архитектуру я ожидал, что JOIN'ы будут работать примерно таким образом: SELECT * FROM matches WHERE match_id IN (SELECT match_id FROM match_users WHERE user_id = 1) но получилось необычно)) так что буду копать, спасибо

МСМК
Шутка в том, что выгружается почти полностью. Когд...

А в чём проблема сделать из этого запроса JOIN ? Тестили IN vs JOIN на больших запросах, получили что IN вообще не выполняется :)

МСМК- Автор вопроса
Константин
А в чём проблема сделать из этого запроса JOIN ? Т...

Да вот в том и проблема, что IN выполняется за 1 секунду, а JOIN на более мощном сервере с необходимым объёмом оперативки для выгрузки таблицы выполняется 250 секунд

МСМК
Шутка в том, что выгружается почти полностью. Когд...

вот так и надо делать - без джойнов, но на подзапросах. Почему медленно - смотрите order by таблиц. Для match_users первым должен быть user_id

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта