Size: a a a

ClickHouse не тормозит

2020 June 23

SC

Smoked Cheese in ClickHouse не тормозит
лимит действует после сортировки
источник

DT

Dmitry Titov in ClickHouse не тормозит
Dmitry Koreckiy
Всем привет!

Есть такая таблица ~ (148kk+ rows)

CREATE TABLE test_table (
 `_id` String,
 `title` String,
 `p1` Int64,
 INDEX title_ngram_index title TYPE ngrambf_v1(3, 10240, 1, 0) GRANULARITY 1
) ENGINE = ReplacingMergeTree() PARTITION BY substring(_id, 1, 1)
ORDER BY
 (_id) SETTINGS index_granularity = 8192


Делаю из нее выборку

WITH
   2 AS distance,
   ['Bost'] AS pattern,
   multiSearchFirstPositionCaseInsensitive(title, pattern) AS mSearchPosCaseInsensitive,
   ngramSearchCaseInsensitive(title, pattern[1]) AS ngSearchCaseInsensitive
SELECT
   title,
   mSearchPosCaseInsensitive,
   ngSearchCaseInsensitive
FROM test_table
WHERE multiFuzzyMatchAny(title, distance, pattern)
limit 25

запрос читает 700к строк

но как только появляется order by, то сразу количество строк становится равным размеру таблицы
в какую сторону копать?
если эта сортировка всегда есть и так важна можно ее пихнуть в начало ORDER BY
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
вопрос в том что если сам запрос без сортировки выдает 700к строк, то почему после этого для сортировки он перечитывает всю таблицу?
источник

SC

Smoked Cheese in ClickHouse не тормозит
потому что без сортировки он просто останавливается при достижении лимита
источник

DT

Dmitry Titov in ClickHouse не тормозит
Dmitry Koreckiy
вопрос в том что если сам запрос без сортировки выдает 700к строк, то почему после этого для сортировки он перечитывает всю таблицу?
потому что взять какие попало 700к и взять оттуда 25 можно
А если тебе нужно отсортировать, то взять какие попало не получится
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
ну там не какие попало) которые удовлетворяют условию WHERE multiFuzzyMatchAny(title, distance, pattern)

окей тогда вот такой пример:

select 
*
from (
WITH
   2 AS distance,
   ['Bost'] AS pattern,
   multiSearchFirstPositionCaseInsensitive(title, pattern) AS mSearchPosCaseInsensitive,
   ngramSearchCaseInsensitive(title, pattern[1]) AS ngSearchCaseInsensitive
SELECT
   title,
   mSearchPosCaseInsensitive,
   ngSearchCaseInsensitive
FROM test_table
WHERE multiFuzzyMatchAny(title, distance, pattern)
)
order by …
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
ааа понял
вы про то говорите что с лимитом он просто в разнобой накидал первые попавшиеся и остановил дальнейшее чтение
источник

SC

Smoked Cheese in ClickHouse не тормозит
да
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
на что обратить внимание чтобы сократить объем читаемых данных?
источник

DT

Dmitry Titov in ClickHouse не тормозит
речь идет о ORDER BY таблицы
источник

DT

Dmitry Titov in ClickHouse не тормозит
Переслано от Dmitry Titov
если эта сортировка всегда есть и так важна можно ее пихнуть в начало ORDER BY
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
а если это динамическая сортировка?
подобие оценки релативности данных elasticsearch сделанный через коленку с помощью multiSearchFirstPositionCaseInsensitive и ngramSearchCaseInsensitive
источник

DT

Dmitry Titov in ClickHouse не тормозит
Dmitry Koreckiy
а если это динамическая сортировка?
подобие оценки релативности данных elasticsearch сделанный через коленку с помощью multiSearchFirstPositionCaseInsensitive и ngramSearchCaseInsensitive
тогда только страдать
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
понял спасибо 👌
источник

SC

Smoked Cheese in ClickHouse не тормозит
можно ещё предагрегировать через MaterializedView если есть возможность
источник

DT

Dmitry Titov in ClickHouse не тормозит
На самом деле люди делали через дополнительную табилцу подобие реверс индекса, но то налюбителя
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
про это вкурсе, но когда у тебя pattern меняется каждую секунду, а записей более 300кк то это не вариант 🙁
данные в temp таблицу будут заливаться дольше, чем перестроить юзеру запрос
источник

DT

Dmitry Titov in ClickHouse не тормозит
Dmitry Koreckiy
про это вкурсе, но когда у тебя pattern меняется каждую секунду, а записей более 300кк то это не вариант 🙁
данные в temp таблицу будут заливаться дольше, чем перестроить юзеру запрос
ну для реверс индекса это не важно, кмк
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
а есть где-то более подробная дока по скип индексам, чем https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/mergetree/#table_engine-mergetree-data_skipping-indexes ?
потому что хотябы для ngrambf_v1(3, 10240, 1, 0) не могу найти описание его параметров
источник

DT

Dmitry Titov in ClickHouse не тормозит
Dmitry Koreckiy
а есть где-то более подробная дока по скип индексам, чем https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/mergetree/#table_engine-mergetree-data_skipping-indexes ?
потому что хотябы для ngrambf_v1(3, 10240, 1, 0) не могу найти описание его параметров
Обычно они делают только хуже. поэтому ими не часто пользуются
источник