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

Как можно быстро вытягивать данные из КХ если идет обращение

к одной той же таблице?
есть таблица на 500 миллионов, нужно вытянуть с нее кусками данные по 10
SELECT * FROM aggregation
ORDER BY id, type, offer, codes
LIMIT 10_000_000 OFFSET 10_000_000;
на графике трафик с БД. Видно, что ждем данные из-за выполнения запроса

в DDL таблице ORDER BY на эти же поля есть
Уточнение, данные хочу получить в C#. Net Framework 4.8

9 ответов

8 просмотров

а точно "SELECT *" нужен? просто так как система колоночная, то если нужно вытащить три-четыре колонки в таблице из 100 колонок, то лучше их явно указать

Sergei- Автор вопроса
Sergei
Там всего 5 колонок, нужны все

вы их для чего вытаскиваете?

не нужно пользоваться LIMIT/OFFSET. Нужно пользоваться where id between 10000 and 10100. При условии что у вас order by id

Sergei- Автор вопроса
Boris
не нужно пользоваться LIMIT/OFFSET. Нужно пользова...

с ORDER BY rule_id проблем нет. немного не корректно написал исходный вопрос. SQL правильный так выглядит, нужно 4 полям ордер SELECT * FROM aggregation ORDER BY search, type, offer, codes LIMIT 10_000_000 OFFSET 10_000_000;

Sergei
с ORDER BY rule_id проблем нет. немного не коррек...

я имел в виду order by/primary key таблицы - её первичный индекс. limit/offset вам не поможет, он фильтрует на выходе, после того как данные уже прочитаны (по крайней мере их начало). У вас каждый раз считывается вся таблица с начала, какой бы offset вы не поставили. Отсюда и такой профиль нагрузки

Sergei- Автор вопроса
Boris
я имел в виду order by/primary key таблицы - её пе...

DLL таблицы engine = MergeTree ORDER BY (search, type, offer, codes) если делать селект на кусок данных через LIMIT OFFSET без order by (search, type, offer, codes), то данные могут прийти не сортированные Это не подходит where id between 10000 and 10100.

Sergei
DLL таблицы engine = MergeTree ORDER BY (search, t...

search строковый что-ли? Тогда можно фрагменты для выборки и по буквам сформировать. order by (search, type, offer, codes) в запросе - оставляйте, если хотите чтобы сортировку делал КХ (но может и память сожрать свех меры) там при таком подходе иная проблема - пока вы частями вычитываете, могут прийти новые данные, и вы их не получите. Но все равно не очень понятно - для чего вы делите запрос на фрагменты, а не получаете его целиком? Если памяти хватает отсортировать все, то выгребайте целиком, без лимита. КХ будет вам стримить - только принимайте.

Sergei
DLL таблицы engine = MergeTree ORDER BY (search, t...

не заметил сразу, что у вас order by таблицы и запроса совпадают. Тогда проблемы с сортировкой нет вобще - КХ все отсортирует на вставках/мерджах. Вам нужен сеттинг правильный - https://clickhouse.com/docs/en/sql-reference/statements/select/order-by/#optimize_read_in_order Будет работать быстро - читать с диска и кормить ваше приложение. Главное чтобы оно приняло. Не нужен вам limit/offset - забудьте про него. Он тут почти не работает при несовпадении order by. Но у вас совпадает.

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

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

type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
45
А чем вам питонисты не угодили?😂
.
79
Господа и дамы, поможите пожалуйста :( Запускаю notepad.exe из делфи CreateProcess(nil, PChar(FullPath), nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, StartInfo, ProcessI...
Ivan Burnatov
7
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Hello. Could you please help me with finding all coordinates within a radius using a spatial index, given that I have a table with coordinates? SET @lng = 37.57925; SET @lat ...
Rinchin G
7
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
I wrote frontend in flutter using dart. Where should I write backend?
𝐌𝐚𝐫𝐲
8
Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
7
Не получается у меня либу Zstd статически слинковать, вылазят какие-то AV Вроде example у них не сложный есть, вроде всё делаю как там... но не выходит чего-то Вопрос - если ...
notme
4
Карта сайта