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

Всем привет Таблица: CREATE TABLE IF NOT EXISTS test ( docId

String,
userId String,
date Date
)
ENGINE = MergeTree(date, (userId, docId), 8192)

Данных в таблице ~67 миллионов

Запрос:

SELECT COUNT(DISTINCT(userId))
FROM test
WHERE docId IN
(SELECT DISTINCT docId
FROM test
WHERE userId = '7682068d-a33f-4226-9f63-a301c97c3e26'
AND NOT docId = 'n/a'
AND NOT docId = ''
AND docId IS NOT NULL)
AND userId IS NOT NULL
AND NOT userId = ''
AND NOT userId = '7682068d-a33f-4226-9f63-a301c97c3e26'

Проблема: выполнение запроса в среднем ~20-25 секунд

(Вопрос - Как сделать выполнение запроса быстрее?)

К примеру отдельный запрос:

SELECT DISTINCT docId
FROM test
WHERE userId = '7682068d-a33f-4226-9f63-a301c97c3e26'
AND NOT docId = 'n/a'
AND NOT docId = ''
AND docId IS NOT NULL

Выполнение - 0.021 sec.

Другой запрос:

SELECT COUNT(DISTINCT(userId)) FROM test WHERE docId IN ('Berkshire', 'Avon')

Выполнение ~8-9 sec.

Что пробовал?

- Secondary Indexes (ADD INDEX). Возможно пробовал криво
- MergeTree(date, (userId), 8192)
- MergeTree(date, (docId), 8192)
- MergeTree(date, (docId, userId), 8192)

(работаю редко с КХ; неопытный; спасибо за помощь)

2 ответов

14 просмотров

SELECT uniqCombined(userId) FROM test WHERE ... GROUP BY docId

SELECT COUNT(DISTINCT(userId)) FROM test PREWHERE docId IN (SELECT DISTINCT docId FROM test WHERE userId = '7682068d-a33f-4226-9f63-a301c97c3e26' AND NOT docId = 'n/a' AND NOT docId = '' AND docId IS NOT NULL) WHERE userId IS NOT NULL AND NOT userId = '' AND NOT userId = '7682068d-a33f-4226-9f63-a301c97c3e26' без двух таблиц отсортированных по разному (да данные будут хранится два раза) такое не исправить. И вообще надо брать постре или мускуль для таких задач, КХ тут как слон на кухне

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

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

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