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

Trả về kết quả ngẫu nhiên (thứ tự theo rand ())

Lý do đặt hàng theo RAND() có thể chậm là bạn đang buộc cơ sở dữ liệu thực sự sắp xếp toàn bộ bảng trước khi trả về bất kỳ thứ gì. Chỉ cần giảm tải xuống một lần quét bảng sẽ nhanh hơn nhiều (mặc dù vẫn hơi chậm).

Điều này có nghĩa là bạn có thể đi được một phần con đường chỉ bằng cách tránh việc đặt hàng:

  SELECT *
    FROM my_table
   WHERE RAND() < 0.1
ORDER BY RAND()
   LIMIT 100

Thao tác này sẽ chọn khoảng 1% tất cả các hàng trong bảng, sắp xếp chúng và trả về 100 hàng đầu. Chỉ cần lưu ý rằng vấn đề chính ở đây (cũng như với câu trả lời của @ cmd) là bạn không thể chắc chắn rằng truy vấn trả về bất cứ thứ gì.

Cách tiếp cận ở trên sẽ bao gồm việc quét toàn bộ bảng (để quyết định những hàng nào sẽ sử dụng) sau đó là sắp xếp khoảng 1% số hàng. Nếu bạn có nhiều hàng, bạn có thể giảm tỷ lệ phần trăm cho phù hợp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mã hóa C # Mysql UTF8

  2. Loại bỏ các bản sao trong bảng MySql lớn

  3. Làm cách nào để có được một tập lệnh tạo bảng trong MySQL Workbench?

  4. Không thể sử dụng đối tượng kiểu PDOStatement dưới dạng mảng

  5. NHibernate IPreUpdateEventListener, IPreInsertEventListener không lưu vào DB