Senior
44
Görev Verilen: CREATE TABLE profile ( id BIGSERIAL PRIMARY KEY, nickname VARCHAR, registered_at TIMESTAMP ); CREATE TABLE post ( id BIGSERIAL PRIMARY KEY, owner_id BIGINT REFERENCES profile (id), body TEXT, inserted_at TIMESTAMP, likes_count INT -- beğeni sayısı ); CREATE TABLE subscription_count ( profile_id BIGINT REFERENCES profile (id) UNIQUE, followers_count INT, -- takipçi sayısı following_count INT -- takip edilenler ); Gerekiyor: select p.id, sc.followers_count from post p join subscription_count sc on sc.profile_id = p.owner_id where sc.followers_count > 500 -- İndeks: create index on post (owner_id) -- Sorgu: select * from post where likes_count > ? AND owner_id = ?;
Sorulan şirketler
ТБанк
AI'dan gelen yanıt
sobes.tech yapay zeka
В данной задаче есть три таблицы: profile, post и subscription_count.
Запрос:
select p.id, sc.followers_count
from post p
join subscription_count sc on sc.profile_id = p.owner_id
where sc.followers_count > 500
Этот запрос выбирает посты, владельцы которых имеют более 500 подписчиков.
Индекс:
create index on post (owner_id);
Он ускоряет поиск постов по owner_id.
Однако, если часто выполняется запрос:
select * from post where likes_count > ? AND owner_id = ?;
то стоит создать составной индекс по (owner_id, likes_count), чтобы ускорить фильтрацию по обоим полям:
create index idx_post_owner_likes on post (owner_id, likes_count);
Это позволит эффективно использовать индекс при запросах с фильтрацией по owner_id и likes_count.
Также стоит проверить, что в таблице subscription_count есть индекс по profile_id (уже есть ограничение UNIQUE, значит индекс есть), что ускорит соединение.
Итог:
- Для ускорения запроса с
joinиндекс наpost.owner_idуже есть. - Для запроса с фильтрацией по
likes_countиowner_idлучше создать составной индекс(owner_id, likes_count).
Это улучшит производительность выборок по указанным условиям.