Tôi có một bảng MySQL DB với nhiều trường loại ngày tháng. Tôi cần phải thực hiện các truy vấn SELECT khác nhau trên bảng này nhưng tôi không chắc chắn cách nào là tốt nhất để tìm các bản ghi từ cùng một tháng.Truy vấn SELECT hiệu quả để tìm các bản ghi trong một tháng
Tôi biết tôi có thể làm như sau:
SELECT *
FROM table
WHERE MONTH(somedate) = 5
AND YEAR(somedate) = 2015
Nhưng tôi tiếp tục đọc đó không phải là hiệu quả và rằng tôi nên đi với việc sử dụng ngày thực tế, tức là
SELECT *
FROM table
WHERE somedate BETWEEN '2015-05-01' AND '2015-05-31'
Tuy nhiên, tất cả tôi sẽ có là tháng và năm là các biến đến từ PHP. Làm cách nào để tính toán ngày cuối cùng của tháng một cách dễ dàng và nhanh chóng nếu tôi đi với lựa chọn thứ hai?
Tôi đang tìm 'between' chậm hơn' month/year' và 'like', trên db của tôi. Tháng/năm = 'Hiển thị các hàng 0 - 29 (tổng cộng 77, Truy vấn mất 0.0825 giây)'. Giữa = 'Hiển thị các hàng 0 - 29 (tổng cộng 77, Truy vấn mất 0,1059 giây)'. Giống như = 'Hiển thị các hàng 0 - 29 (tổng cộng 77, Truy vấn mất 0,0815 giây)'. Đây là trên một bảng hàng 7k. Chủ đề này chỉ theo hướng khác. http://dba.stackexchange.com/questions/96245/mysql-date-field-filter-by-like-vs-month – chris85
MySQL có thể sử dụng hiệu quả chỉ mục có cột hàng đầu là 'somedate'. Nếu bạn không có chỉ mục như vậy, thì bạn có thể tạo một chỉ mục, ví dụ: 'CREATE INDEX ON table (somedate)'. Miễn là truy vấn trả về dưới 10% số hàng trong bảng, chỉ mục sẽ làm cho truy vấn nhanh hơn nhiều. Với các hàm bao quanh cột somedate, MySQL phải đánh giá các hàm đó trên mọi hàng trong bảng. – spencer7593
Sử dụng 'GIẢI THÍCH 'để xem kế hoạch thực hiện. Để so sánh hiệu suất, hãy đảm bảo rằng kết quả truy vấn không được trả về từ bộ nhớ truy vấn. Có một số cách để thực hiện điều đó, ví dụ: 'SQL_NO_CACHE' hit, bao gồm biến do người dùng định nghĩa trong truy vấn, vô hiệu hóa bộ đệm truy vấn, v.v. (Chúng tôi thực sự có các máy chủ MySQL của chúng tôi được cấu hình để lưu trữ * chỉ * truy vấn có chứa gợi ý' SQL_CACHE' , vì vậy chúng tôi kiểm soát những truy vấn nào có thể được lưu trong bộ nhớ cache và ngăn các kết quả bị xóa bởi các truy vấn mà chúng tôi không cần lưu trữ.) – spencer7593