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

Khi nào hàm ORDER BY RAND () của MySQL có thứ tự?

Bạn nói đúng, nó sẽ áp dụng ORDER BY sau khi giảm số hàng với WHERE, GROUP BY và HAVING. Nhưng nó sẽ áp dụng ORDER BY trước LIMIT.

Vì vậy, nếu bạn lọc số hàng xuống đủ, thì có, ORDER BY RAND () có thể đạt được những gì bạn muốn mà không có tác động lớn đến hiệu suất. Có một lợi ích hợp pháp đối với mã đơn giản và dễ đọc.

Rắc rối xảy đến khi bạn nghĩ rằng truy vấn của bạn sẽ giảm các hàng xuống một cái gì đó nhỏ, nhưng theo thời gian khi dữ liệu của bạn phát triển, số lượng hàng cần sắp xếp sẽ trở nên lớn trở lại. Vì truy vấn của bạn khi đó LIMIT 10 trên kết quả được sắp xếp sẽ ẩn thực tế là bạn đang thực hiện ORDER BY RAND () trên 500 nghìn hàng. Bạn chỉ thấy hiệu suất ngày càng kém đi một cách bí ẩn.

Tôi đã viết về các phương pháp thay thế để chọn một hàng ngẫu nhiên trong cuốn sách của tôi Phản nguyên tố SQL:Tránh Cạm bẫy của lập trình cơ sở dữ liệu hoặc trong các câu trả lời khác tại đây trên Stack Overflow:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Danh sách các thủ tục / hàm được lưu trữ Dòng lệnh Mysql

  2. Kiểm tra mật khẩu băm của WordPress bằng mật khẩu đơn giản

  3. Trường hợp SQL khi FROM (UNIX_TIME)

  4. Cách chọn DISTINCT hàng mà không cần chọn trường ORDER BY

  5. Điều gì tốt hơn trong MYSQL count (*) hoặc count (1)?