16 điểm bởi xguru 2024-04-15 | 3 bình luận | Chia sẻ qua WhatsApp
  • Tiện ích mở rộng PostgreSQL của Supabse giúp gợi ý các chỉ mục để cải thiện hiệu năng truy vấn
  • Khi truyền một truy vấn vào hàm index_advisor(), nó sẽ trả về chi phí trước/sau đối với startup/tổng thể và câu lệnh SQL DDL để tạo chỉ mục
    • Thực thi: select * from index_advisor('select book.id from book where title = $1');
    • Trả về: {"CREATE INDEX ON public.book USING btree (title)"}
  • Với các truy vấn phức tạp, công cụ cũng có thể trả về nhiều câu lệnh tạo chỉ mục
  • Hỗ trợ tham số generic ($1, $2, ..)
  • Hỗ trợ Materialized View
  • Có thể nhận diện bảng/cột bị che khuất bởi view

3 bình luận

 
savvykang 2024-04-15

Ở phiên bản hiện tại, công cụ này chỉ đề xuất chỉ mục btree cho một cột. Nếu điều kiện truy vấn trở nên phức tạp hơn hoặc bạn đang dùng tìm kiếm toàn văn, thì không thể sử dụng được. https://supabase.com/docs/guides/…

 
savvykang 2024-04-16

Mình nghe nói khi điều kiện truy vấn phức tạp thì thay vì chỉ mục đa cột, hệ thống sẽ dùng nhiều chỉ mục đơn cột, nhưng có vẻ chúng không hoạt động hoàn toàn giống nhau. Hoặc cũng có trường hợp tốt nhất là dùng đồng thời chỉ mục đa cột và nhiều chỉ mục đơn cột

https://www.postgresql.org/docs/current/indexes-bitmap-scans.html

 
xguru 2024-04-15

Ý kiến Hacker News

  • Sẽ rất hay nếu có một tính năng đề xuất kiểu dữ liệu hiệu quả hơn dựa trên dữ liệu thực sự được lưu trong bảng
  • Mong có một cơ sở dữ liệu có thể tự động phát hiện truy vấn chậm và tạo chỉ mục cần thiết
    • Chạy kiểm thử tải từ ứng dụng, gọi cơ sở dữ liệu và thu thập truy vấn, sau đó cơ sở dữ liệu tự điều chỉnh
  • Tôi không biết rằng HypoPG đã khả dụng trên RDS hơn một năm rồi
  • Với các truy vấn có từ 3 phép join trở lên, tôi muốn một relation sử dụng chỉ mục, nhưng nếu không đặt limit trong CTE thì Postgres sẽ cố chạy từng phép join song song và tìm cách join một lượng lớn hàng
    • Dạo này làm việc với query planner khiến tôi có cảm giác sắp chia tay pg
  • CockroachDB có tích hợp sẵn tính năng tương tự
    • Nó lấy các truy vấn chậm hiện có, phân tích các chỉ mục ảo và đưa ra đề xuất để có kế hoạch truy vấn tốt hơn
    • Có thể thêm chỉ mục chỉ với một cú nhấp trong UI console
  • Trong các engine truy vấn phân tán như Presto hoặc Spark, người ta dùng partition và bucket thay cho chỉ mục để làm việc tương tự
    • Điều này có thể giảm mức tính toán, thời gian và chi phí
  • Được viết bằng Vanilla Pl/PgSQL nên khá tiện
    • Có cảm giác muốn sao chép hàm index_advisor(text) vào session rồi bắt đầu hard-code và thêm heuristic
    • Hầu hết các extension thực sự hữu ích đều cần compile, cài đặt, tạo và xóa
  • Tương tự TiAdvisor của TiDB và cũng dùng phương pháp ảo
  • Tôi đang dùng pghero, và nó cung cấp tính năng này qua GUI
  • Có vẻ như nó không đưa ra cân nhắc hay insight nào về các trade-off liên quan
    • Extension nền tảng là HypoPG dường như không thu thập thống kê về dữ liệu ảnh hưởng đến query planner
  • Tôi tò mò không biết nó có nhận biết các bảng cha và bảng con được kế thừa hay không