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

Làm cách nào để làm cho truy vấn này chạy nhanh hơn?

Chỉ mục

  • Bạn cần - ít nhất là - một chỉ mục trên mọi trường được sử dụng trong JOIN điều kiện.

  • Chỉ mục trên các trường xuất hiện trong WHERE hoặc GROUP BY hoặc ORDER BY hầu hết thời gian cũng hữu ích.

  • Khi trong một bảng, hai hoặc nhiều trường được sử dụng trong JOIns (hoặc WHERE hoặc GROUP BY hoặc ORDER BY), một chỉ mục phức hợp (kết hợp) của (hai hoặc nhiều) trường này có thể tốt hơn các chỉ mục riêng biệt. Ví dụ trong SiteNumbers bảng, các chỉ mục có thể có là kết hợp (number_accountid, number_active) hoặc (number_active, number_accountid) .

  • Điều kiện trong các trường Boolean (BẬT / TẮT, hoạt động / không hoạt động) đôi khi làm chậm các truy vấn (vì các chỉ mục không được chọn lọc và do đó không hữu ích lắm). Tái cấu trúc (chuẩn hóa cha) các bảng là một tùy chọn trong trường hợp đó nhưng có lẽ bạn có thể tránh được sự phức tạp thêm vào.

Bên cạnh lời khuyên thông thường (kiểm tra kế hoạch GIẢI THÍCH, thêm chỉ mục nếu cần, kiểm tra các biến thể của truy vấn),

Tôi nhận thấy rằng trong truy vấn của bạn có một phần Sản phẩm Descartes. Bảng Accounts có mối quan hệ một-nhiều với ba bảng FTPDetails , SiteNumbersPPC . Điều này có tác dụng là nếu bạn có ví dụ:1000 tài khoản và mọi tài khoản đều liên quan đến, chẳng hạn như 10 FTPDetails, 20 SiteNumbers và 3 PPC, truy vấn sẽ trả về cho mỗi tài khoản 600 hàng (tích 10x20x3). Trong tổng số 600 nghìn hàng có nhiều dữ liệu được trùng lặp.

Thay vào đó, bạn có thể chia truy vấn thành ba cộng một cho dữ liệu cơ sở (Tài khoản và các bảng còn lại). Theo cách đó, chỉ 34K hàng dữ liệu (có độ dài nhỏ hơn) sẽ được truyền:

Accounts JOIN Clients JOIN Users 
  (with all fields needed from these tables)
  1K rows

Accounts JOIN FTPDetails
  (with Accounts.account_id and all fields from FTPDetails)
  10K rows

Accounts JOIN SiteNumbers
  (with Accounts.account_id and all fields from SiteNumbers)
  20K rows

Accounts JOIN PPC
  (with Accounts.account_id and all fields from PPC)
  3K rows

và sau đó sử dụng dữ liệu từ 4 truy vấn ở phía máy khách để hiển thị thông tin kết hợp.

Tôi sẽ thêm các chỉ mục sau:

Table Accounts
  index on (account_designer)
  index on (account_client)
  index on (account_active, account_id)
  index on (account_update)

Table FTPDetails
  index on (ftp_active, ftp_accountid)

Table SiteNumbers
  index on (number_active, number_accountid)

Table PPC
  index on (ppc_active, ppc_accountid)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu rõ hơn về các vấn đề của SQLalchemy's `yi_per () '

  2. trường được phân tách bằng dấu phẩy để so sánh trong mysql

  3. Công cụ điều chỉnh hiệu suất MySQL tốt nhất?

  4. Cài đặt Percona XtraDB Cluster trên CentOS 7

  5. Cách tạo hồ sơ người dùng với PHP và MySQL