如何优化PostgreSQL查询,获取指定作者的目标书籍
最优实现方案
核心思路:合并查询逻辑到单次数据库调用
你已经尝试了合并查询的方式,还可以进一步优化SQL的可读性与性能,推荐以下几种更高效的写法,同时配合索引强化查询速度。
写法1:JOIN关联(推荐,可读性更强)
SELECT b.* FROM books b JOIN authorBookRelations abr ON b.id = abr.book_id WHERE abr.author_id = 5 AND b.title IN ('arbitraryTitle_1', 'arbitraryTitle_2');
写法2:简化版子查询(比你当前的嵌套写法更简洁)
SELECT * FROM books WHERE id IN ( SELECT book_id FROM authorBookRelations WHERE author_id = 5 ) AND title IN ('arbitraryTitle_1', 'arbitraryTitle_2');
性能优化:添加针对性索引
数据量较大时,索引能避免全表扫描,大幅提升查询速度,建议创建以下索引:
- 给
authorBookRelations表创建author_id+book_id的联合索引:CREATE INDEX idx_abr_author_book ON authorBookRelations(author_id, book_id); - 给
books表创建title+id的联合索引:CREATE INDEX idx_books_title_id ON books(title, id);
方案优势
- 减少应用层与数据库的交互次数,省去两次查询+Python过滤的额外开销
- 数据库查询优化器能更好地处理JOIN/子查询逻辑,效率远高于应用层过滤
- 代码更简洁易维护,后续调整查询条件只需修改SQL即可
内容的提问来源于stack exchange,提问作者Jacob Dallas
相关产品推荐
相关产品推荐

