Hướng dẫn how do i randomly select data in mysql? - làm cách nào để chọn ngẫu nhiên dữ liệu trong mysql?

Đã hỏi 11 năm, 11 tháng trước 11 years, 11 months ago

Đã xem 550k lần 550k times

Làm thế nào tôi có thể viết tốt nhất một truy vấn chọn 10 hàng ngẫu nhiên từ tổng số 600k?

Peter O.

31.5K14 Huy hiệu vàng77 Huy hiệu bạc92 Huy hiệu Đồng14 gold badges77 silver badges92 bronze badges

Đã hỏi ngày 1 tháng 12 năm 2010 lúc 21:35Dec 1, 2010 at 21:35

FranciscfranciscFrancisc

74.6K61 Huy hiệu vàng177 Huy hiệu bạc273 Huy hiệu Đồng61 gold badges177 silver badges273 bronze badges

2

Một bài viết tuyệt vời xử lý một số trường hợp, từ đơn giản, đến khoảng trống, không đồng đều với các khoảng trống.

//jan.kneschke.de/projects/mysql/order-by-rand/

Đối với hầu hết các trường hợp chung, đây là cách bạn làm điều đó:

SELECT name
  FROM random AS r1 JOIN
       [SELECT CEIL[RAND[] *
                     [SELECT MAX[id]
                        FROM random]] AS id]
        AS r2
 WHERE r1.id >= r2.id
 ORDER BY r1.id ASC
 LIMIT 1

Điều này cho rằng việc phân phối ID là bằng nhau và có thể có những khoảng trống trong danh sách ID. Xem bài viết để biết các ví dụ nâng cao hơn

Squazz

3,8026 Huy hiệu vàng36 Huy hiệu bạc56 Huy hiệu Đồng6 gold badges36 silver badges56 bronze badges

Đã trả lời ngày 1 tháng 12 năm 2010 lúc 21:41Dec 1, 2010 at 21:41

16

SELECT column FROM table
ORDER BY RAND[]
LIMIT 10

Không phải là giải pháp hiệu quả nhưng hoạt động

Đã trả lời ngày 13 tháng 10 năm 2012 lúc 6:43Oct 13, 2012 at 6:43

Preetam purbiapreetam purbiaPreetam Purbia

5.5783 Huy hiệu vàng22 Huy hiệu bạc26 Huy hiệu đồng3 gold badges22 silver badges26 bronze badges

7

Truy vấn đơn giản có hiệu suất tuyệt vời và hoạt động với các khoảng trống:excellent performance and works with gaps:

SELECT * FROM tbl AS t1 JOIN [SELECT id FROM tbl ORDER BY RAND[] LIMIT 10] as t2 ON t1.id=t2.id

Truy vấn này trên bảng 200K mất 0,08 giây và phiên bản bình thường [chọn * từ thứ tự tbl bởi rand [] giới hạn 10] mất 0,35s trên máy của tôi.0.08s and the normal version [SELECT * FROM tbl ORDER BY RAND[] LIMIT 10] takes 0.35s on my machine.

Điều này là nhanh vì pha sắp xếp chỉ sử dụng cột ID được lập chỉ mục. Bạn có thể thấy hành vi này trong giải thích:

Chọn * Từ đơn đặt hàng TBL của Rand [] Giới hạn 10:

Chọn * Từ TBL dưới dạng T1 Tham gia [chọn ID từ đơn đặt hàng TBL của Rand [] giới hạn 10] là T2 trên T1.ID = T2.ID

Phiên bản có trọng số: //stackoverflow.com/a/41577458/893432: //stackoverflow.com/a/41577458/893432

Đã trả lời ngày 11 tháng 1 năm 2017 lúc 0:53Jan 11, 2017 at 0:53

AlialiAli

20.6K14 Huy hiệu vàng81 Huy hiệu bạc95 Huy hiệu Đồng14 gold badges81 silver badges95 bronze badges

1

Tôi đang nhận được các truy vấn nhanh [khoảng 0,5 giây] với CPU chậm, chọn 10 hàng ngẫu nhiên trong 400K đăng ký cơ sở dữ liệu MySQL không kích thước 2GB. Xem ở đây Mã của tôi: Lựa chọn nhanh các hàng ngẫu nhiên trong MySQLfast queries [around 0.5 seconds] with a slow cpu, selecting 10 random rows in a 400K registers MySQL database non-cached 2Gb size. See here my code: Fast selection of random rows in MySQL

$time= microtime_float[];

$sql='SELECT COUNT[*] FROM pages';
$rquery= BD_Ejecutar[$sql];
list[$num_records]=mysql_fetch_row[$rquery];
mysql_free_result[$rquery];

$sql="SELECT id FROM pages WHERE RAND[]*$num_records

Bài Viết Liên Quan

Chủ Đề