🦾 IT-Качалка Давида Шекунца 💪
2023-10-09 05:58
CREATE TABLE some_table (
id UUID PRIMARY KEY,
foreign_id UUID,
created_at TIMESTAMP WITH TIMEZONE
)
Есть индекс:
CREATE INDEX some_idx ON some_table (foreign_id, created_at);
Какой запрос (и примерно насколько) будет быстрее:
SELECT foreign_id, MAX(created_at)
FROM some_table
WHERE created_at > now() - interval '1 minute'
GROUP BY foreign_id;
ИЛИ
SELECT foreign_id, MAX(created_at)
FROM some_table
WHERE created_at > now() - interval '1 minute'
AND foreign_id IN (SELECT id FROM foreign_table)
GROUP BY foreign_id;
Голосуйте 👍 за первый и 👎 за второй
И не ссыте ошибиться, круто видеть что люди пытаются
Ответ через
3
2
1
Вы думали я дам ответ? Хер там, я расскажу как это работает, а ответ вы сами должны понять
Короче, compound индексы хранятся базой слева направо, то есть если индекс (a, b, c) вы ищите по колонке (a) или (a, b), то индекс будет работать, но если вы пропустили какую-то из колонок то индекс не будет использован
ВАЖНО в каждой БД свое устройство компаунд индексов, поэтому проверяйте по своей доке
Почему это надо знать: потому что человек не знающий пошел бы создавать новый индекс, который уменьшил бы скорость всех записей, а знающий решил бы моментально, так еще и ускорил бы работу с этим индексом (из-за того, что теперь еще один запрос позволял утилизировать кэш этого индекса)
Бонус вопрос: какой вид индекса будет использован во вложенном SELECT, если id - это primary key?