当前位置 : 主页 > 网络推广 > seo >

检索随机项时MySQL与PHP

来源:互联网 收集:自由互联 发布时间:2021-06-16
哪个更有效(管理超过100K记录时): A. Mysql SELECT * FROM user ORDER BY RAND(); 当然,之后我已经拥有该记录的所有字段. B. PHP 使用memcached让$cache_array保存“SELECT id_user FROM user ORDER BY id_user”中的所
哪个更有效(管理超过100K记录时):

A. Mysql

SELECT * FROM user ORDER BY RAND();

当然,之后我已经拥有该记录的所有字段.

B. PHP

使用memcached让$cache_array保存“SELECT id_user FROM user ORDER BY id_user”中的所有数据1小时左右……然后:

$id = array_rand($cache_array);

当然,之后我必须通过以下方式进行MYSQL调用:

SELECT * FROM user WHERE id_user = $id;

所以…哪个更有效率? A还是B?

回答这类问题的正确方法是做一个基准测试.以各种方式执行快速而脏的实现,然后运行基准测试以确定哪个执行得更好.

话虽如此,已知ORDER BY RAND()很慢,因为MySQL不可能使用索引. MySQL基本上会为表中的每一行运行一次RAND()函数,然后根据从RAND()返回的内容对行进行排序.

如果memcached的开销证明小于全表扫描的成本,那么将所有user_id存储在memcached中然后从数组中选择随机元素的另一个想法可能会更好.如果您的数据集很大或过时是一个问题,您可能会遇到问题.此外,您还为应用程序添加了一些复杂性.我会尝试寻找另一种方式.

我会给你第三个选项,可能会超出你的建议:选择你的用户表中行的count(user_id),然后让php生成一个介于0和count(user_id)减去1(含)之间的随机数.然后做一个SELECT * FROM用户LIMIT 1 OFFSET随机数生成的php;.

同样,回答这些类型问题的正确方法是进行基准测试.还有什么是猜测.

网友评论