Trên thực tế ... tôi đã chạy một bài kiểm tra và tôi có thể đã trả lời được câu hỏi của chính mình. Tôi nghĩ rằng tôi sẽ đăng thông tin này ở đây trong trường hợp nó hữu ích cho bất kỳ ai khác. (Nếu tôi đã làm gì sai ở đây, vui lòng cho tôi biết!)
Điều này thật đáng ngạc nhiên ...
Trái ngược với mọi thứ mà tôi đã đọc, tôi đã tạo một bảng có tên TestData với 1 triệu hàng và chạy truy vấn sau:
CHỌN * TỪ TestData WHERE number =41 ORDER BY RAND () LIMIT 8
... và nó trả về các hàng trong thời gian trung bình là 0,0070 giây. Tôi thực sự không hiểu tại sao RAND () lại có tiếng xấu như vậy. Nó có vẻ khá hữu dụng đối với tôi, ít nhất là trong tình huống cụ thể này.
Tôi có ba cột trong bảng của mình:
id [BIGINT (20)] | textfield [tinytext] | số [BIGINT (20)]
Khóa chính trên id, chỉ mục trên số.
Tôi đoán MySQL đủ thông minh để biết rằng nó chỉ nên áp dụng RAND () cho 20 hàng được trả về bởi "WHERE number =41"? (Tôi đặc biệt chỉ thêm 20 hàng có giá trị 41 cho 'số'.)
Phương thức truy vấn con thay thế trả về kết quả với thời gian trung bình khoảng 0,0080 giây, chậm hơn so với phương thức không truy vấn con.
Phương thức truy vấn con:SELECT * FROM (SELECT * FROM TestData WHERE number =41) as t ORDER BY RAND () LIMIT 8