哪个更有效(管理超过100K记录时): A. Mysql SELECT * FROM user ORDER BY RAND(); 当然,之后我已经拥有该记录的所有字段. B. PHP 使用memcached让$cache_array保存“SELECT id_user FROM user ORDER BY id_user”中的所
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;.
同样,回答这些类型问题的正确方法是进行基准测试.还有什么是猜测.