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

Chỉ mục MySQL cho Nhóm Theo / Đặt hàng Theo

Điều này sẽ giúp bạn. Viết lại truy vấn của bạn như sau:

SELECT c1, Sum(c2) 
FROM table 
WHERE c4 = 2011 
AND c5 = 0 
AND c6 In (6,9,11)
AND c3 IS NOT NULL   
GROUP BY c1

Bây giờ, hãy tạo một chỉ mục tổng hợp trên các cột (c4, c5, c6) với các cột TRONG THỨ TỰ ĐÓ. Các cột trong chỉ mục của bạn sẽ xuất hiện theo thứ tự giống như các cột trong mệnh đề WHERE của bạn. Nếu không chỉ mục sẽ không hoạt động. Tính chọn lọc của chỉ mục này đủ hẹp để sắp xếp tệp trên bảng tạm thời (cho nhóm theo) phải nhanh.

Lý do để di chuyển c3 vào cuối truy vấn là như sau. Ví dụ, chúng ta hãy giả sử rằng c3 có thể nhận các giá trị từ 0 đến 100 (hoặc nó có thể là NULL). Nếu bạn chạy truy vấn "IS NOT NULL", thì Mysql cần duyệt gần như tất cả chỉ mục B-Tree ngoại trừ các cạnh tương ứng với NULL. Do đó, MySQL quyết định rằng quét toàn bộ bảng là một lựa chọn dễ dàng hơn so với việc đi qua tất cả các đường dẫn khác nhau trong chỉ mục. Mặt khác, bạn sẽ thấy rằng nếu truy vấn của bạn là "IS NULL" và chỉ mục của bạn là (c3, c4, c5, c6) thì Mysql sẽ sử dụng chỉ mục này. Điều này là do trong trường hợp này Mysql chỉ cần duyệt qua phần của cây chỉ mục tương ứng với giá trị NULL.

Loại chỉ mục mà MySQL cần phụ thuộc rất nhiều vào truy vấn được đề cập. Tạo chỉ mục trên tất cả các cột, như @louis đề xuất, KHÔNG phải là một ý kiến ​​hay!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách bật Trình lập lịch sự kiện khi tôi mở Máy chủ MySQL

  2. MySQL 8 - Loại bỏ tất cả các thủ tục được lưu trữ trong một cơ sở dữ liệu cụ thể

  3. Mệnh đề tương đương CHỈ TRONG () MySQL

  4. MySQL ::Chọn từ chuỗi được phân tách bằng dấu phẩy

  5. công việc xóa các hàng cũ hơn 3 tháng trong cơ sở dữ liệu mysql