примеры запросов (они одинаковые и отличаются только шириной по времени)
60 секунд
SELECT count(*)
FROM MeasuresDistributed
WHERE (account = 1442349) AND (appId = 4291) AND (id = 1440877) AND (timestamp > 1508346060) AND (timestamp < 1508346120)
┌─count()─┐
│ 66 │
└─────────┘
1 rows in set. Elapsed: 0.012 sec. Processed 274.41 thousand rows, 4.39 MB (23.35 million rows/s., 373.64 MB/s.)
1800 секунд
SELECT count(*)
FROM MeasuresDistributed
WHERE (account = 1442349) AND (appId = 4291) AND (id = 1440877) AND (timestamp > 1508346060) AND (timestamp < 1508347160)
┌─count()─┐
│ 1210 │
└─────────┘
1 rows in set. Elapsed: 0.013 sec. Processed 267.97 thousand rows, 4.29 MB (20.30 million rows/s., 324.77 MB/s.)
Вот как создавалась таблица.
CREATE TABLE default.MeasuresDistributed ( account UInt32, appId UInt32, id UInt32, date Date, timestamp UInt32, value Float32, `tags.name` Array(UInt32), `tags.value` Array(UInt32)) ENGINE = MergeTree(date, (account, appId, id, timestamp), 8192)
Почему и в том и в том случае Processed около 270000 строк? Разве по индексу не должно было в первом все отсечь?
У вас первичный же date а не timestamp т.е партиционирование по date
Обсуждают сегодня