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

Tối ưu hóa truy vấn sử dụng chỉ mục MySQL

Một vài điều ... Tôi sẽ có một chỉ mục kết hợp DUY NHẤT trên (a_id, job, state, start_time)

Điều này để giúp tối ưu hóa truy vấn trên tất cả các tiêu chí, theo tôi tin là trình tự được điều chỉnh tốt nhất. Một "A_ID", sau đó là hai công việc, một phạm vi trạng thái nhỏ, sau đó dựa trên thời gian. Tiếp theo, không có dấu ngoặc kép nào ... Có vẻ như bạn đang chuyển đổi so sánh số thành chuỗi, hãy để chúng ở dạng số để so sánh - nhanh hơn chuỗi.

Ngoài ra, bằng cách có tất cả chúng như một phần của chỉ mục, nó là chỉ mục COVERING nghĩa là nó KHÔNG phải truy cập dữ liệu trang thô để lấy các giá trị khác nhằm kiểm tra các bản ghi đủ điều kiện để đưa vào hay không.

SELECT 
      count(*) AS tries 
   FROM 
      tasks
   WHERE 
          a_id = 614
      AND job IN ( 1, 3 ) 
      AND state > 80 AND state < 100 
      AND start_time >= 1386538013;

Bây giờ, lý do tại sao chỉ số ... hãy xem xét kịch bản sau. Bạn có hai phòng có các hộp ... Trong phòng đầu tiên, mỗi hộp là một "a_id", trong đó là các công việc theo thứ tự, trong mỗi công việc là phạm vi trạng thái và cuối cùng là thời gian bắt đầu.

Trong một phòng khác, các hộp của bạn được sắp xếp theo thời gian bắt đầu, trong đó a_id được sắp xếp và cuối cùng là trạng thái.

Điều này sẽ dễ dàng hơn để tìm thấy những gì bạn cần. Đó là cách bạn nên nghĩ về các chỉ số. Tôi muốn đi đến một ô cho "A_ID =614", sau đó chuyển sang Công việc 1 và một hộp khác cho Công việc 3. Trong mỗi Công việc 1, Công việc 3, lấy 80-100, sau đó là thời gian. Tuy nhiên, bạn biết rõ hơn dữ liệu và khối lượng của mình trong từng tiêu chí xem xét và có thể điều chỉnh.

Cuối cùng là số đếm (ID) so với số lượng (*). Tất cả những gì tôi quan tâm là một hồ sơ đủ tiêu chuẩn. Tôi không cần biết ID thực tế vì tiêu chí lọc đã đủ điều kiện là bao gồm hay không, tại sao phải tìm (trong trường hợp này) để biết "ID" thực tế.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Loại dữ liệu MySQL nào để sử dụng để lưu trữ các giá trị boolean

  2. MySql.ConnectorNET.Data so với MySql.Data

  3. Chuyển đổi mã MySQL thành Access:GROUP_CONCAT và một bộ ba JOIN

  4. Mã lỗi:1005. Không thể tạo bảng '...' (errno:150)

  5. Làm cách nào tôi có thể truyền một int thành bit trong MySQL 5.1?