相关疑难解决方法(0)

MySQL:ORDER BY RAND的替代品()

我已经阅读了MySQL ORDER BY RAND()函数的一些替代方法,但大多数替代方案仅适用于需要单个随机结果的位置.

有没有人知道如何优化返回多个随机结果的查询,例如:

   SELECT u.id, 
          p.photo 
     FROM users u, profiles p 
    WHERE p.memberid = u.id 
      AND p.photo != '' 
      AND (u.ownership=1 OR u.stamp=1) 
 ORDER BY RAND() 
    LIMIT 18 
Run Code Online (Sandbox Code Playgroud)

mysql sql random sql-order-by

58
推荐指数
3
解决办法
8万
查看次数

从mysql数据库返回随机行而不使用rand()

我希望能够从数据库中提取15个左右的记录.我已经看到WHERE id = rand()随着数据库变大,使用会导致性能问题.我见过的所有解决方案都是为了选择单个随机记录.我想得到倍数.

有谁知道为大型数据库执行此操作的有效方法?

编辑:

进一步编辑和测试:

我在使用MyISAM的新数据库上创建了一个相当简单的表.我给了这3个字段:( autokey无符号自动数字键)bigdata(大blob)和somemore(中等int).然后我将随机数据应用到表中并使用Navicat运行一系列查询.结果如下:

Query 1: select * from test order by rand() limit 15

 Query 2: select * 
          from 
      test 
          join 
      (select round(rand()*(select max(autokey) from test)) as val from test limit 15)                                           as rnd
      on 
          rnd.val=test.autokey;`
Run Code Online (Sandbox Code Playgroud)

(我尝试了选择和选择不同,它没有明显的区别)

和:

Query 3 (I only ran this on the second test):
SELECT  *
    FROM    (
    SELECT  @cnt := COUNT(*) + 1,
            @lim := 10
    FROM    test
    ) vars
    STRAIGHT_JOIN …
Run Code Online (Sandbox Code Playgroud)

php mysql random

3
推荐指数
1
解决办法
3188
查看次数

如何加快此查询?

我有代码从数据库生成四辆汽车及其照片:

$l=$database->query("SELECT car,brand,exactprice FROM $table ORDER BY rand() LIMIT 4");
$buffer="";
foreach($l as $l){
    $buffer.="<li><h3>{$l['car']}</h3><p>Price {$l['exactprice']}</p>";
    $k=$database->query("SELECT logo FROM logo WHERE brand='{$l['brand']}'");
    $buffer.="<img src='{$base_addr}/{$k[0]['logo']}'><br>";
}
Run Code Online (Sandbox Code Playgroud)

这是我目前的代码.我可以重写我的MySQL命令,所以我会logologo第一个选择中获得吗?

目前加载此页面需要4.32秒.

php mysql database-design

1
推荐指数
1
解决办法
96
查看次数

标签 统计

mysql ×3

php ×2

random ×2

database-design ×1

sql ×1

sql-order-by ×1