SELECT FROM table_name ORDER BY RAND LIMIT 10; 有没有效率更高的办法
对于大型数据表,使用ORDER BY RAND()可能会导致性能问题,因为它需要对整个表进行排序。以下是一些替代方法:
- 通过使用id或时间戳等唯一标识符并结合随机数生成器来获取随机行,如下所示:
SELECT * FROM table_name WHERE id >= (SELECT FLOOR(MAX(id) * RAND()) FROM table_name) ORDER BY id LIMIT 10;
- 如果数据表不是太大,可以使用子查询和LIMIT来获取随机行,如下所示:
SELECT * FROM (SELECT * FROM table_name ORDER BY RAND() LIMIT 100) AS temp_table ORDER BY id LIMIT 10;
- 可以使用PHP或其他编程语言来随机选择行,而不是从数据库中获取随机行。例如,使用PHP的array_rand()函数:
$records = $pdo->query('SELECT * FROM table_name')->fetchAll(PDO::FETCH_ASSOC); $random_records = array_rand($records, 10); foreach ($random_records as $record_index) { $record = $records[$record_index]; // Do something with the record }
注意,这种方法需要将整个数据表加载到内存中,因此对于非常大的数据表可能不可行。
原文地址: https://www.cveoy.top/t/topic/EDo 著作权归作者所有。请勿转载和采集!