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

Truy vấn MySQL nào nhanh hơn?

Bạn nên luôn sử dụng EXPLAIN để xác định cách truy vấn của bạn sẽ chạy.

Thật không may, MySQL sẽ thực thi truy vấn con của bạn dưới dạng CÂU HỎI PHỤ THUỘC, có nghĩa là truy vấn con sẽ được chạy cho mỗi hàng trong truy vấn bên ngoài. Bạn sẽ nghĩ rằng MySQL sẽ đủ thông minh để phát hiện ra rằng truy vấn con không phải là một truy vấn con tương quan và sẽ chạy nó chỉ một lần, than ôi, nó vẫn chưa thông minh như vậy.

Vì vậy, MySQL sẽ quét qua tất cả các hàng trong học sinh, chạy truy vấn con cho mỗi hàng và không sử dụng bất kỳ chỉ mục nào trên truy vấn bên ngoài.

Viết truy vấn dưới dạng JOIN sẽ cho phép MySQL sử dụng các chỉ mục và truy vấn sau đây sẽ là cách tối ưu để viết nó:

SELECT COUNT(*) AS count
FROMstudents s
JOIN classes c
  ON c.id = s.classes_id
  AND c.departments_id = 1
WHERE s.status = 1

Điều này sẽ sử dụng các chỉ mục sau:

Các lớp
students(`status`)
classes(`id`, `departements_id`) : multi-column index


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa tinyint, smallint, mediumint, bigint và int trong MySQL là gì?

  2. PHP-SQL:Hình ảnh đã tải lên hiển thị dưới dạng văn bản rác

  3. Sắp xếp Mảng đa chiều theo các chỉ mục cho trước - PHP?

  4. Làm thế nào để mỗi hàng hoạt động trong trình kích hoạt trong mysql?

  5. Android tự động làm mới khi dữ liệu mới được chèn vào listview