1
vzch 2015-02-23 02:53:16 +08:00
我觉得这不是 MySQL 的问题,这是子查询的效率问题
|
3
xiaogui 2015-02-23 03:25:41 +08:00 1
根据需求,重新审视各处随机获取信息的逻辑和设计,特殊情况下可以将随机逻辑放在数据库以外的地方处理。
就本例来讲,可能正如 @vzch 所讲,是子查询的问题。 |
5
bombless 2015-02-23 05:26:29 +08:00
明明是floor(逃
|
7
msg7086 2015-02-23 08:29:48 +08:00
@xiaogui 因为ORDER BY RAND会扫全表。这是教科书式的错误写法了吧。
否则也不会出现撸主这样硬生生用子查询来提高效率的写法了。 |
10
jevonszmx 2015-02-23 19:33:39 +08:00 via iPhone
每次随机查,性能损失太大了,真心解决不了的话,不如加个字段rand_sort,写个定时脚本批量更新一下排序值。
|
11
zhengkai 2015-02-23 20:17:30 +08:00
小项目不需要关心子查询效率,大项目不会用子查询
如果是范式你可以封装个函数,给定表名字段名,直接生成出 SQL 我碰到这类问题会习惯的去想,比方说最近一万条的数组放进 memcache,然后现取现随机 而且大部分场景,就算是随机,也会有根据时间调整展现几率的问题吧? |
12
konakona OP |
13
msg7086 2015-02-23 21:49:52 +08:00 via iPhone
RAND()…
|
14
zhengkai 2015-02-23 23:43:20 +08:00
@konakona 我说的不是 rand 用不用子查询,是说的用 rand(也就必然包含子查询或者 inner join)。按我的标准用 rand 的都是小项目,而不需要再在所有用 rand 的项目里区分大小了
而且慢的原因是 mysql 没法自己优化,会把所有用不上的字段放在一起,所以 sort buffer 会非常大,极限情况就是表只有 id 这一个字段的时候不就不需要子查询了么。这个概念属于比较基础的知识,如果你是想说你这 SQL 很高端真不至于……这是老王2009年的blog http://hi.baidu.com/thinkinginlamp/item/1b9aaf09014acce0f45ba6d3 我在晚些时候知道是《高性能 MySQL》里说的 另外那叫 rand 不是 round……看到你两个回帖都写的 round …… |
15
konakona OP |
16
iannil 2015-02-24 02:01:05 +08:00
艾玛,刚撸了一遍那个31岁0基础好友买rmbp的帖子,这里显得好悠闲
|
17
xuhai951753 2015-02-24 17:26:03 +08:00
|
18
konakona OP @xuhai951753 谢谢你还找了个帖子..不过请认真看我的帖子...=,=我的sql就是你找的帖子..
|
19
xuhai951753 2015-02-24 23:26:59 +08:00
@konakona 帖子最下不是给了个更快的sql语句么。 [虽然没实测过。。 [光速逃
|
20
konakona OP @xuhai951753 -,- 我这sql就是啊..但是我发这个帖子的最主要原因是想追问下目前的mysql有没有比较简单的办法?=,= 真的, 每次都这样写,我记不住..
|