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

Всем привет. Есть таблица 1, в которой есть order by по

6 полям (кол-во строк ~60 млрд). Есть таблица 2, в которой есть поле ID (по которому order by) и те же самые 6 полей (кол-во строк такое же).
Идея была такая: я знаю список ID (около 1 млн), по ним фильтрую таблицу 2 и делаю JOIN с таблицей 1 по 6 полям. Ожидал, что сработает ускорение запроса при использовании JOIN по всем полям, входящим в order by, но запрос висел более 10 мин и так и не выполнился. Почему не сработала идея?

SELECT
count()
FROM
table1 -- 60 млрд
JOIN
( SELECT field1, field2, field3, field4, field5, field6 -- 1 млн
FROM table2
WHERE id LIKE '2C0A%' -- единственное поле из order by table2
)
USING ( field1, field2, field3, field4, field5, field6 ) -- все поля из order by table1

*** План выполнения:
Query pipeline:
Expression
Expression
ParallelAggregating
Expression × 24
Filter
MergeTreeThread

---
Пробовал вариант с IN, тоже самое:
SELECT
count()
FROM
table1
WHERE ( field1, field2, field3, field4, field5, field6 ) IN (
SELECT field1, field2, field3, field4, field5, field6
FROM table2
WHERE id LIKE '2C0A%'
)

3 ответов

7 просмотров

а ты попробуй наоборот, меньшую таблицу к большей джоинить

SELECT field1, field2, field3, field4, field5, field6 -- 1 млн FROM table2 WHERE id LIKE '2C0A%' вот этот позапрос за 10 минут выполняется или нет?

почему JOIN не стал быстрее - понятно. Оптимизации создания фильтра для MergeTree из USING JOIN-а не сделана. Обсуждение тут https://github.com/ClickHouse/ClickHouse/issues/8062 Почему нет ускорение для варианта с IN - не понятно. IN должен прокидываться в MergeTree и использовать индекс.

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

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

Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
А чем вам питонисты не угодили?😂
.
79
Всем привет. Поделитесь, пожалуйста, опытом. Есть форма, на которой имеется dbgrid и кнопки: добавить, редактировать, удалить. Если нет записей в dbgrid, то кнопки редактирова...
Евгений
4
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
83
Вот смотрите у меня есть два стрима сейчас fs, cs: TStream; fs := TFileStream.Create('filename'); cs := TCompressionStream.Create(compression_level, fs); Я хочу сделать так: ...
notme
5
type TExtensions<GExtender>=class function GetExtension<GEntityExtenderType>:GEntityExtenderType; end; function TExtensions<GExtender>.GetExtension<GEntityExtenderType...
zamtmn
8
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Карта сайта