как то при создании таблицы задать сортировку для ключа ORDER BY ? простой способ ORDER BY (datetime DESC) не работает , часто будут нужны свежие данные , и хочется индекс сразу перевернуть на DESC
можно типа ORDER BY (-datetime) (не так в тупую, но это возможно) но на самом деле вам этого не нужно. запросы ORDER BY DESC и так нормально работают c ORDER BY (datetime)
ладно ) пойду дальше копать , а ДБА клика далеко ) ушел в запой ) SELECT t.* FROM default.sensors_ym AS t WHERE (sensor_serial = '10000581HIT') AND (type = 'press') ORDER BY datetime ASC LIMIT 10 10 rows in set. Elapsed: 49.631 sec. Processed 2.70 billion rows, 241.71 GB (54.45 million rows/s., 4.87 GB/s.)
а как быстро отработает select t.timestamp from [всё остальное]? тут вроде недавно уже было обсуждение, что в случае LIMIT и SELECT * быстрее сначала вытащить десять нужных значений одного поля из индекса, а потом SELECT * WHERE timestamp in (...)
а order by какой у таблицы?
ORDER BY (datetime, master_serial, sensor_serial, type)
то есть у вас high-cardinality значение на первой позиции индекса, а WHERE идет по другим полям
вероятно при создании таблицы не понимали юз кейс , видимо надо переделать
ну понятно, проблема вовсе не в desc/asc если записи WHERE (sensor_serial = '10000581HIT') AND (type = 'press') далеко от конца/начала datetime или их вообще нет, то нужно весь индекс/все таблицу просканировать
спасибо, напишу дба пусть исправляет )
Ну там надо все данные перелить по новому ключу 👍
материализованное представление с новым ключем временно не решит проблему ?
Сделал в итоге на том же объёме данных 400 мсек вместо 44 сек
Обсуждают сегодня