2013-04-29 36 views
12

Có đúng là hiệu suất ORDER BY rand() rất chậm so với các giải pháp khác không? Nếu có, cách tốt hơn để chọn (các) hàng ngẫu nhiên từ cơ sở dữ liệu là gì?MySQL chọn hàng ngẫu nhiên - rand() hiệu suất

truy vấn của tôi:

SELECT sName FROM bpoint WHERE placeID=? ORDER BY rand() LIMIT 1; 
+3

Nó phụ thuộc vào bao nhiêu dữ liệu có. Chúng ta đang nói về bàn lớn đến mức nào? – bestprogrammerintheworld

+0

Nó cũng phụ thuộc vào những gì, chính xác, bạn có nghĩa là "ngẫu nhiên": bạn có yêu cầu mỗi bản ghi được chọn với xác suất bằng nhau không? Hoặc là một bản phân phối hoàn toàn đồng nhất không cần thiết? – eggyal

+0

5-10.000 hàng. Xác suất bằng nhau mong muốn. –

Trả lời

13

Vâng, ORDER BY RAND() có thể rất chậm trong kết quả-bộ lớn hơn.

Một lựa chọn là để lấy resultset với tuyên bố này (vào một mảng):

SELECT sName FROM bpoint WHERE placeID=?; 

Sau đó - sử dụng array_rand($resultset) để có được một mục ngẫu nhiên từ các truy vấn $resultset.

+2

Vì vậy, nó là hàm php array_rand() nhanh hơn? –

+0

@JamaicaBob - nó thực sự phụ thuộc vào kết quả lớn như thế nào. Bạn có bao nhiêu hàng trong bảng bpoint? – bestprogrammerintheworld

+0

khoảng 10.000 hàng –

Các vấn đề liên quan