当前位置:  开发笔记 > 编程语言 > 正文

检索随机项时MySQL与PHP

如何解决《检索随机项时MySQL与PHP》经验,为你挑选了1个好方法。

哪个更有效(管理超过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



1> Asaph..:

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

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

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

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

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


@Asaph哇......这些是150k记录的结果:OFFSET花了0.0017秒而BY RAND()花了1.6337秒 - 谢谢!
推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有