Câu lệnh postgres chậm, chiếm nhiều CPU

Em có 2 table bên dưới và truy vấn của em

books :

book_id 
   1
   2
   3
   4
   5
   6
   n

chapters :

chapter_id | book_id | title
   1           1         'a' 
   2           1         'b'  
   3           2         'c' 
   4           2         'x'
   5           3         'y'
   n           n         'z'
SELECT
	book_id,(
		select 
			json_agg(c2.*) 
		from (
			SELECT 
				chapter_id
			FROM 
				chapters c
			WHERE 
				c.book_id = b.book_id
					order by chapter_id desc
						LIMIT 2 
		) as c2
		group by c2.book_id
) as chapters

FROM
	books b

kết quả :

book_id | chapters
   1         [{1},{2}]
   2         [{3},{4}]
   3         [{5}]

Vâng đúng như những gì em mong muốn. Tuy nhiên , với table ‘chapters’ em có thử với records hơn 100k rows thì lại là chuyện khác. Cực tốn CPU và chậm . Em thắc mắc không biết truy vấn em có gì sai hoặc không hợp lý chỗ nào xin mọi người giúp đỡ em với ạ!

1 Like

Cậu show kết quả của explain query được không @Devil_Chan?

1 Like

Các table bạn thiết kế thế nào cũng nên đưa database diagram lên cho mọi người xem với liệu bạn đã thiết kế tốt chưa. Những trường mà bạn hay ORDER BY nó thì nên tạo index.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?