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

Làm cách nào để bạn làm cho Python / PostgreSQL nhanh hơn?

Đừng lãng phí thời gian lập hồ sơ. Thời gian luôn luôn ở trong các hoạt động cơ sở dữ liệu. Làm càng ít càng tốt. Chỉ là số lần chèn tối thiểu.

Ba điều.

Một. Đừng CHỌN nhiều lần để phù hợp với các thứ nguyên Ngày, Tên máy chủ và Người. Tìm nạp tất cả dữ liệu MỘT LẦN vào từ điển Python và sử dụng nó trong bộ nhớ. Đừng lặp lại các lựa chọn singleton. Sử dụng Python.

Hai. Không cập nhật.

Cụ thể, Không làm điều này. Đó là mã không hợp lệ vì hai lý do.

cursor.execute("UPDATE people SET chats_count = chats_count + 1 WHERE id = '%s'" % person_id)

Nó được thay thế bằng một SELECT COUNT (*) FROM ... đơn giản. Không bao giờ cập nhật để tăng số lượng. Chỉ cần đếm các hàng ở đó bằng câu lệnh SELECT. [Nếu bạn không thể thực hiện việc này với SELECT COUNT hoặc SELECT COUNT (DISTINCT) đơn giản, bạn đang thiếu một số dữ liệu - mô hình dữ liệu của bạn phải luôn cung cấp số lượng hoàn chỉnh chính xác. Không bao giờ cập nhật.]

Và. Không bao giờ xây dựng SQL bằng cách sử dụng thay thế chuỗi. Hoàn toàn chết lặng.

Nếu vì lý do nào đó mà SELECT COUNT(*) không đủ nhanh (điểm chuẩn đầu tiên, trước khi làm bất cứ điều gì sai), bạn có thể lưu kết quả đếm vào một bảng khác. SAU tất cả các tải. Thực hiện SELECT COUNT(*) FROM whatever GROUP BY whatever và chèn cái này vào một bảng đếm. Không cập nhật. Đã từng.

Số ba. Sử dụng biến ràng buộc. Luôn luôn.

cursor.execute( "INSERT INTO ... VALUES( %(x)s, %(y)s, %(z)s )", {'x':person_id, 'y':time_to_string(time), 'z':channel,} )

SQL không bao giờ thay đổi. Các giá trị bị ràng buộc thay đổi, nhưng SQL không bao giờ thay đổi. Điều này nhanh hơn RẤT NHIỀU. Không bao giờ xây dựng các câu lệnh SQL động. Không bao giờ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. làm thế nào để xử lý mật khẩu luôn thay đổi trong sqlalchemy + psycopg2?

  2. Chuyển đổi quyền truy cập sang PostgreSQL?

  3. Cách age () hoạt động trong PostgreSQL

  4. PostgreSQL, Npgsql trả về 42601:lỗi cú pháp tại hoặc gần $ 1

  5. Có cách tiếp cận tiêu chuẩn nào để xử lý các mảng (tập hợp) không có thứ tự trong PostgreSQL không?