次のようなスキーマを持つpostgres dbがあります
CREATE TABLE authors (
id integer NOT NULL
);
CREATE TABLE posts (
id integer NOT NULL,
author_id integer,
text text
);
CREATE TABLE comments (
id integer NOT NULL,
post_id integer,
ordinal integer DEFAULT 0,
author_id integer
);
特定の が与えられた場合、次のようなauthor_id
20 件の投稿のバッチを選択できるようにしたいと考えています。
- その作者によるコメントのある投稿は含まれません。
- その作者による投稿ではありません。
- その投稿に対する最新の 10 件のコメントが含まれます。
ポイント#1はクエリ時間を殺していると思います。今までは、内部クエリを使用してその点を解決していました。
SELECT * from posts
WHERE posts.id NOT IN (
SELECT posts.id FROM posts JOIN comments ON posts.id = comments.post_id)
データベースが大きくなるにつれて、このクエリは大幅に悪化しました。私は SQL が得意ではありません。これを行うより良い方法はありますか?それが役立つ/痛い場合は、ActiveRecordを使用しています。