🦾 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_tableWHERE created_at > now() - interval '1 minute'GROUP BY foreign_id;ИЛИSELECT foreign_id, MAX(created_at)FROM some_tableWHERE created_at > now() - interval '1 minute'AND foreign_id IN (SELECT id FROM foreign_table)GROUP BY foreign_id;Голосуйте 👍 за первый и 👎 за второйИ не ссыте ошибиться, круто видеть что люди пытаются Ответ через321Вы думали я дам ответ? Хер там, я расскажу как это работает, а ответ вы сами должны понятьКороче, compound индексы хранятся базой слева направо, то есть если индекс (a, b, c) вы ищите по колонке (a) или (a, b), то индекс будет работать, но если вы пропустили какую-то из колонок то индекс не будет использованВАЖНО в каждой БД свое устройство компаунд индексов, поэтому проверяйте по своей докеПочему это надо знать: потому что человек не знающий пошел бы создавать новый индекс, который уменьшил бы скорость всех записей, а знающий решил бы моментально, так еще и ускорил бы работу с этим индексом (из-за того, что теперь еще один запрос позволял утилизировать кэш этого индекса)Бонус вопрос: какой вид индекса будет использован во вложенном SELECT, если id - это primary key?