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

Chỉ mục MySQL - các phương pháp hay nhất theo bảng này và các truy vấn là gì

Truy vấn này:

SELECT *
FROM listings
WHERE (publishedon BETWEEN 1441105258 AND 1443614458) AND
      (published = 1) AND
      (cat_id in (1,2,3,4,5)) AND
      (source_id in (1,2,3,4,5));

Rất khó để tối ưu hóa chỉ với các chỉ mục. Chỉ mục tốt nhất là chỉ mục bắt đầu bằng published và sau đó là các cột khác - không rõ thứ tự của chúng phải như thế nào. Lý do là vì tất cả ngoại trừ published không sử dụng = .

Bởi vì vấn đề hiệu suất của bạn là về một loại, điều đó cho thấy rằng rất nhiều hàng đang được trả về. Thông thường, một chỉ mục được sử dụng để đáp ứng WHERE trước khi chỉ mục có thể được sử dụng cho ORDER BY . Điều đó làm cho điều này khó tối ưu hóa.

Gợi ý. . . Không có cái nào tuyệt vời như vậy:

  • Nếu bạn định truy cập dữ liệu theo tháng, thì bạn có thể xem xét phân vùng dữ liệu theo tháng. Điều đó sẽ làm cho truy vấn không có ORDER BY nhanh hơn, nhưng sẽ không giúp được ORDER BY .
  • Thử các thứ tự cột khác nhau sau khi published trong chỉ mục. Bạn có thể tìm thấy (các) cột chọn lọc nhất. Tuy nhiên, một lần nữa, điều này sẽ tăng tốc truy vấn trước khi sắp xếp.
  • Hãy nghĩ về các cách mà bạn có thể cấu trúc truy vấn để có nhiều điều kiện bình đẳng hơn trong WHERE hoặc để trả về một tập dữ liệu nhỏ hơn.
  • (Không thực sự được khuyến nghị) Đặt một chỉ mục trên published và cột đặt hàng. Sau đó, sử dụng một truy vấn con để tìm nạp dữ liệu. Đặt các điều kiện bất bình đẳng (IN và như vậy) trong truy vấn bên ngoài. Truy vấn con sẽ sử dụng chỉ mục để sắp xếp và sau đó lọc kết quả.

Lý do cuối cùng không được khuyến khích là vì SQL (và MySQL) không đảm bảo thứ tự kết quả từ một truy vấn con. Tuy nhiên, vì MySQL hiện thực hóa các truy vấn con nên kết quả thực sự theo thứ tự. Tôi không thích sử dụng các tác dụng phụ không có giấy tờ, có thể thay đổi từ phiên bản này sang phiên bản khác.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:chọn phần tử đầu tiên của danh sách được phân tách bằng dấu phẩy

  2. Thứ tự MySQL theo các bản sao trên cùng đầu tiên

  3. Làm thế nào để xử lý kích thước UID mới của Facebook?

  4. MySQL-db lib cho Python 3.x?

  5. PayPal IPN không cập nhật cơ sở dữ liệu MySQL