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

mysql:chọn truy vấn hiệu quả nhất từ ​​hai

Không có nghi ngờ gì rằng phiên bản 1 - tách biệt trong đó các mệnh đề trong mỗi bên của liên minh - sẽ nhanh hơn. Hãy xem tại sao phiên bản - mệnh đề where trên kết quả liên hợp - lại tệ hơn:

  • khối lượng dữ liệu:sẽ luôn có nhiều hàng hơn trong kết quả hợp nhất, bởi vì có ít điều kiện hơn về những hàng được trả về. Điều này có nghĩa là nhiều I / O đĩa hơn (tùy thuộc vào chỉ mục), nhiều bộ nhớ tạm thời hơn để giữ bộ hàng, đồng nghĩa với thời gian xử lý nhiều hơn
  • quét lặp lại:toàn bộ kết quả của liên hợp phải được quét lại để áp dụng điều kiện, khi nó có thể được xử lý trong lần quét đầu tiên. Điều này có nghĩa là xử lý gấp đôi bộ hàng, mặc dù có thể là trong bộ nhớ, nhưng nó vẫn là công việc bổ sung.
  • chỉ mục không được sử dụng cho các mệnh đề trong đó trên kết quả hợp nhất. Nếu bạn có chỉ mục trên các trường khóa ngoại postType, nó sẽ không được sử dụng

Nếu bạn muốn có hiệu suất tối đa, hãy sử dụng UNION ALL , chuyển thẳng các hàng vào kết quả mà không có chi phí, thay vì UNION , loại bỏ các bản sao (thường bằng cách sắp xếp) và có thể tốn kém và không cần thiết dựa trên nhận xét của bạn

Xác định các chỉ mục này và sử dụng phiên bản 1 để có hiệu suất tối đa:

create index t1_authorID_postType on t1(authorID, postType);
create index t1_websiteID_postType on t1(websiteID, postType);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảng tổng hợp MySQL với tiêu đề động dựa trên dữ liệu cột đơn

  2. Django trên Google App Engine với Cloud SQL trong môi trường nhà phát triển

  3. Làm cách nào để chọn thông tin đầu vào gần đây nhất cho từng thành viên?

  4. Khớp các từ / hậu tố tương tự / biến thể trong MySQL

  5. MySQL - CHỌN tên đứng đầu tiên theo thứ tự bảng chữ cái