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

Вопрос еще один очень интересный вопреки рекомендациями не использовать CH

для хренения текстовых документов я все равно не могу объяснить этот эффект ?
SELECT internal_id
FROM articles
WHERE internal_id = '6f58fa93be8424153cc0a4e27a42dc8649d98a1a'
┌─internal_id──────────────────────────────┐
│ 6f58fa93be8424153cc0a4e27a42dc8649d98a1a │
└──────────────────────────────────────────┘
1 rows in set. Elapsed: 0.108 sec. Processed 3.27 million rows, 151.11 MB (30.39 million rows/s., 1.40 GB/s.)
clickhouse-db-03.dmetrics.internal 🙂 SELECT internal_id,content
:-] FROM articles where internal_id = '6f58fa93be8424153cc0a4e27a42dc8649d98a1a';
SELECT
internal_id,
content
FROM articles
WHERE internal_id = '6f58fa93be8424153cc0a4e27a42dc8649d98a1a'
┌─internal_id──────────────────────────────┬─content────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ 6f58fa93be8424153cc0a4e27a42dc8649d98a1a │ One selling point for Harris, is that her experience with cyber crimes could give her a leg up as someone qualified to protect our cyber security from hostile nations.Even if you accept the idiotic idea that Trump didn't collude with Putin, the nicest thing you can say about Trump is that he has failed to take any action to protect our elections , our power grid, nuclear power plants etc etc. In other words, he is either an agent of Putin, or a sniveling coward. There is a government report that states that China and Russia have the capabilities to shut down our power grid and interupt our gas suplly lines. Imagine if they had done this during this current freeze. Thousands would have died │
└──────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
1 rows in set. Elapsed: 10.399 sec. Processed 3.27 million rows, 14.89 GB (314.48 thousand rows/s., 1.43 GB/s.)
Первый запрос по индексу берет 100 мс а тот же самой запрос который по индексу но и приносит текстовое поле дополнительное отвеает в 100 раз медленее ? Есть ли идеи почему ?

13 ответов

12 просмотров

первый запрос читает только из одной колонки: internal_id второй запрос читает из двух колонок: internal_id, content при этом content сильно больше по размеру - это можно увидеть в статистике по запросам: Processed 3.27 million rows, 151.11 MB против Processed 3.27 million rows, 14.89 GB

Кх по минимуму читает одну гранулу. Т.е. если в ней 1000 строк, он прочтет 1000 гигантских текстов из другой колонки

Processed 3.27 million rows -- по индексу? Что ? ну и сто раз тут уже показывали как сделать подзапрос который вернет PK и потом по PK выберет

Pavel-Nemirovsky Автор вопроса
Denny [Altinity]
Processed 3.27 million rows -- по индексу? Что ? ...

ну мы новинькие только в начале пути можете направить о чем речь ?

Pavel Nemirovsky
ну мы новинькие только в начале пути можете направ...

1. у вас не работает индекс. SELECT internal_id FROM articles WHERE internal_id = '6f58fa93be8424153cc0a4e27a42dc8649d98a1a' должет возвращать малое кол-во прочитанных строк проверьте ДДЛ таблицы 2. после того как почините индекс, должно быть быстро.

Pavel Nemirovsky
ну мы новинькие только в начале пути можете направ...

если по индексу то processed rows будут тысячи а не миллионы show create table в студию

Pavel-Nemirovsky Автор вопроса
Denny [Altinity]
если по индексу то processed rows будут тысячи а н...

CREATE TABLE fgi.articles_data ( internal_id String, timestamp Nullable(DateTime('UTC')), content String, url Nullable(String), data_provider String, document_length UInt32, domain_name String, is_near_duplicate UInt8, publish_date DateTime('UTC'), tags.name Array(String), tags.score Array(Float64), tags.tagger Array(String) ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/replicated/fgi/articles_data', 'srv1.internal') PARTITION BY toYYYYMMDD(publish_date) ORDER BY internal_id SETTINGS index_granularity = 8192

Pavel-Nemirovsky Автор вопроса
【D】【J】
1. у вас не работает индекс. SELECT internal_id F...

если бы индекс не работал то 100 мс не было было для internal_id

Pavel Nemirovsky
если бы индекс не работал то 100 мс не было было д...

ясно PARTITION BY toYYYYMMDD(publish_date) ORDER BY internal_id SETTINGS index_granularity = 8192 т.е. каждый парт в каждом шарде дает 8129 (или 16384) строк., чтобы получить Processed 3.27 million rows надо иметь 199 партов, т.е. конечно это можно все поправить, и партиционирование шардирование, и т.д. наверное вам придется делать два запроса select publish_date, internal_id FROM articles WHERE internal_id = '6f58fa93be8424153cc0a4e27a42dc8649d98a1a' SELECT internal_id, content FROM articles WHERE internal_id = '6f58fa93be8424153cc0a4e27a42dc8649d98a1a' and publish_date = .... одним запросом вроде прунинг сделать не получится а да, еще можно попробовать PREWHERE вместо WHERE

Pavel Nemirovsky
если бы индекс не работал то 100 мс не было было д...

было бы, колонка сжатая... маленькая. из кеша норм.

Pavel-Nemirovsky Автор вопроса
Denny [Altinity]
ясно PARTITION BY toYYYYMMDD(publish_date) ORDER ...

спасибо за направление посмотрим что делать

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта