PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách xóa nhiều hàng khỏi bảng được truy cập thường xuyên

  1. Các chỉ mục thường vô dụng đối với các hoạt động trên 90% tất cả các hàng. Quét tuần tự sẽ nhanh hơn theo cả hai cách. (Áp dụng các trường hợp ngoại lệ.)

  2. Nếu bạn cần cho phép đọc đồng thời, bạn không thể lấy một ổ khóa độc quyền trên bàn. Vì vậy, bạn cũng không thể bỏ bất kỳ chỉ mục nào trong cùng một giao dịch.

  3. Bạn có thể giảm các chỉ mục trong các giao dịch riêng biệt để giữ cho thời hạn của khóa độc quyền ở mức tối thiểu. Trong Postgres 9.2 trở lên, bạn cũng có thể sử dụng CHỈ SỐ DROP NGAY LẬP TỨC , chỉ cần ổ khóa tối thiểu. Sau đó, hãy sử dụng CREATE INDEX CONCURRENTLY để xây dựng lại chỉ mục trong nền - và chỉ thực hiện một khóa độc quyền rất ngắn.

Nếu bạn có điều kiện ổn định để xác định 10% (hoặc ít hơn) hàng ở lại, tôi sẽ đề xuất chỉ mục một phần chỉ trên những hàng đó để có được điều tốt nhất cho cả hai:

  • Đọc các truy vấn có thể truy cập bảng một cách nhanh chóng (sử dụng chỉ mục một phần) mọi lúc.
  • DELETE lớn sẽ không sửa đổi chỉ mục từng phần, vì không có hàng nào liên quan đến DELETE .
CREATE INDEX foo (some_id) WHERE delete_flag = FALSE;

Giả sử delete_flagboolean . Bạn phải bao gồm cùng một vị từ trong các truy vấn của mình (ngay cả khi nó có vẻ thừa về mặt logic) để đảm bảo Postgres có thể lập chỉ mục một phần.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng sqldf và RPostgreSQL cùng nhau

  2. Số lượng mục nhập tối đa trong histogram_bounds

  3. 3 cách liệt kê tất cả các hàm trong PostgreSQL

  4. Sau khi cập nhật lên macOS Big Sur, tôi không thể kết nối với cơ sở dữ liệu PostgreSQL của mình bằng MAMP

  5. Cú pháp không chính xác gần 'PROCEDURE' postgresql