Hạt giống Rand ()
MySQL sử dụng đồng hồ hệ thống để khởi tạo RAND()
khi không có giá trị thứ hai. Giá trị khởi đầu tính bằng micro giây và tôi không thể tạo lại sự cố của RAND()
tạo ra cùng một giá trị hai lần như bạn mô tả.
Nếu bạn mở MySQL Workbench và thực thi hai câu lệnh cùng một lúc. Đầu ra khác nhau đối với mỗi loại.
SELECT RAND();
SELECT RAND();
Khi bạn mở nhiều tab và nhận được kết quả giống nhau. Đây có thể là sự cố bộ nhớ đệm, nhưng bạn cho biết bạn đang đóng dấu URL để ngăn bộ nhớ đệm. Vì vậy, hãy bật ghi nhật ký SQL trên máy chủ và xác minh rằng các truy vấn mới đang được gọi.
Hiệu suất Rand ()
ORDER BY RAND()
chậm vì nó yêu cầu MySQL đọc toàn bộ bảng. Chẵn ORDER BY RAND() LIMIT 1
vẫn yêu cầu MySQL để đọc toàn bộ bảng.
CẬP NHẬT:
Bạn có thể xem giá trị ngẫu nhiên mà SQL đang tạo là gì.
$query = "SELECT *, RAND() AS `X`
FROM customers
WHERE customer_group='consumables' AND customer_updated < DATE_SUB(NOW(), INTERVAL 1 DAY)
ORDER BY `X`
LIMIT 10";
Điều đó sẽ bao gồm cột X
Cho mỗi hàng. Giá trị ngẫu nhiên được sử dụng để sắp xếp truy vấn. Thêm phần này vào đầu ra và xem liệu mỗi trình duyệt có thực sự trả về cùng một bộ kết quả từ MySQL.