哪个更有效(管理超过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()
.
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;
.
同样,回答这些类型问题的正确方法是进行基准测试.还有什么是猜测.