Tôi thấy trong tài liệu về sự khác biệt giữa count(*)
và count(pk)
. Tôi đã sử dụng count(pk)
(nơi pk
a SERIAL PRIMARY KEY
) không biết về sự tồn tại của count(*)
.
Câu hỏi của tôi là về tối ưu hóa nội bộ của Postgres. Có đủ thông minh để nhận ra rằng một SERIAL PRIMARY KEY
sẽ tồn tại trong mỗi hàng và không bao giờ là sai và chỉ đếm các hàng hoặc nó sẽ thực hiện kiểm tra vị ngữ dự phòng cho mỗi hàng? Tôi đồng ý rằng điều này có lẽ là quá nhiều tối ưu hóa vô nghĩa nhưng tôi chỉ tò mò.
Tôi đã xem xét đầu ra của EXPLAIN
và EXPLAIN VERBOSE
cho count(*)
, count(id)
và count(id > 50)
để xem nếu EXPLAIN
đề cập đến việc kiểm tra các vị từ trong đầu ra của nó. Nó không.