- Check cú pháp (hầu như không ảnh hưởng hiệu năng)
- Check ngữ nghĩa (hiểu được câu lệnh SELECT - check xem có cột được select trong bảng đó không, check user có quyền không….)
- Check chiến lược thực thi (Map, có index không, …) (bước này tốn hiệu năng, vì phải check nhiều bước)
- Phân tích chiến lược thực thi (xem xét tất cả các khả năng, các con đường tạo ra, check hết các con đường và chọn con đường thực thi có cost nhỏ nhất)
- Tạo ra chiến lược thực thi
→ Tốn hiệu năng nhất ở 3-4-5
POSTGRESQL → Phân tích chi tiết hơn so với MySQL, dùng nhiều yếu tố hơn để đánh giá COST một câu lệnh
Thống kê (phân tích) trong PostgreSQL
PostgreSQL có một hệ thống thu thập và báo cáo thông tin về hoạt động của máy chủ, giúp bạn hiểu rõ hiệu suất và tối ưu hóa cơ sở dữ liệu của mình.
Các loại thống kê trong PostgreSQL:
- Thống kê được sử dụng bởi Query Planner:
- Thống kê đơn cột (Single-Column Statistics): Giúp ước tính số lượng hàng được truy xuất bởi truy vấn để lựa chọn kế hoạch truy vấn tốt nhất.
- Thống kê mở rộng (Extended Statistics): Cung cấp thông tin chi tiết hơn về phân phối dữ liệu, giúp cải thiện khả năng ước tính của Query Planner.
- Thống kê giám sát (Monitoring Statistics):
- Bộ thu thập thống kê (Statistics Collector): Đếm số lần truy cập vào bảng và chỉ mục, giúp bạn hiểu tần suất sử dụng dữ liệu.
Cách xem thống kê:
- Sử dụng các view hệ thống trong schema
pg_catalog
, ví dụ:
pg_stat_user_tables
: Thống kê về các bảng của người dùng.
pg_stat_user_indexes
: Thống kê về các chỉ mục của người dùng.
pg_stat_database
: Thống kê cấp cơ sở dữ liệu.
- Sử dụng câu lệnh
EXPLAIN
: Hiển thị kế hoạch truy vấn và ước tính chi phí, giúp bạn đánh giá hiệu quả của truy vấn.
→ PostgreSql trong hầu hết trường hợp thì ngon hơn