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

Lập chỉ mục chính xác theo Tham gia-Nơi-Nhóm Theo các truy vấn chọn lọc, tránh Sử dụng tạm thời; Sử dụng filesort

Tôi sẽ viết truy vấn như sau:

SELECT c.time
     , SUM(c.counter)
     , MAX(p.clustername) AS clustername
  FROM cell c

  JOIN swap_plan p
    ON p.siteid      = c.siteid
   AND p.clustername = 'Cluster A'

 WHERE c.time  >=  'day1'
   AND c.time  <=  'day2'
 GROUP
    BY c.time

Tôi chắc chắn có một chỉ mục trên cell với time làm cột hàng đầu.

MySQL có thể sử dụng cùng một chỉ mục để đáp ứng vị từ phạm vi (trong mệnh đề WHERE) và để đáp ứng GROUP BY mà không cần thao tác "Sử dụng tệp tin".

... ON cell (time)

Tùy thuộc vào kích thước của các cột, chỉ mục bao trùm có thể mang lại hiệu suất tối ưu. Chỉ mục bao gồm tất cả các cột từ bảng được tham chiếu trong truy vấn, do đó, truy vấn có thể được đáp ứng hoàn toàn từ các trang chỉ mục mà không cần tra cứu các trang trong bảng bên dưới.

... ON cell (time, siteid, counter)

Đối với chỉ mục trên swap_plan , Tôi muốn có một chỉ mục với site_id là cột hàng đầu và bao gồm clustername cột, một trong số:

... ON swap_plan (clustername, site_id)

hoặc

... ON swap_plan (site_id, clustername)

Có vẻ như sẽ có một ràng buộc DUY NHẤT đối với sự kết hợp của hai cột đó, tức là các giá trị của site_id sẽ khác biệt đối với một clustername nhất định . (Nếu không đúng như vậy và (site_id,clustername) giống nhau tuple xuất hiện nhiều lần, có khả năng tổng cộng của counter được thổi phồng.

Tôi đang tìm EXPLAIN đầu ra để hiển thị tra cứu 'ref' tới swap_plan bảng từ giá trị của c.siteid và giá trị const (nghĩa đen là 'Cụm A') cho tên cụm.

Với các bảng có kích thước 31 hàng và 368 hàng, chúng ta sẽ không thấy sự khác biệt đáng kể về hiệu suất (thời gian đã trôi qua) giữa một kế hoạch thực thi tối ưu và một kế hoạch thực thi khủng khiếp.

Khi một trong hai bảng có quy mô lên đến hàng triệu hàng, đó là lúc sự khác biệt sẽ trở nên rõ ràng. Lựa chọn kế hoạch thực thi của trình tối ưu hóa bị ảnh hưởng bởi số liệu thống kê (kích thước, số hàng, số lượng cột) của mỗi bảng, do đó, kế hoạch thực thi có thể thay đổi khi kích thước bảng tăng lê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. PHP Lỗi nghiêm trọng Hết bộ nhớ

  2. Lưu trữ mật khẩu cho MYSQL trong ứng dụng PHP một cách an toàn

  3. Cách xử lý Máy chủ MySQL đang chạy với tùy chọn --secure-file-priv nên nó không thể thực thi câu lệnh này trên máy Mac

  4. Sử dụng Cơ sở dữ liệu quan hệ MySQL trên Debian 5 (Lenny)

  5. Làm việc với Sự kiện trong MySQL