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

Ý tưởng tốt / Ý tưởng xấu? Sử dụng MySQL RAND () bên ngoài một tập hợp nhỏ các kết quả truy vấn con?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python db-api:fetchone vs fetchmany vs fetchall

  2. Có trình điều khiển JDBC nào hỗ trợ lệnh sql LOAD DATA INFILE không?

  3. Làm thế nào để sao lưu và khôi phục cơ sở dữ liệu MySQL bằng NetBeans?

  4. MySQL sửa khoảng trống autoincrement trong hai bảng

  5. PDO của PHP đang bỏ qua tùy chọn ATTR_TIMEOUT cho MySQL khi không thể truy cập máy chủ