Sql INNER JOIN与Rand的查询顺序

时间:2013-01-02 20:32:34

标签: mysql sql

我需要重新优化此查询,这非常慢。

SELECT al.alias_title, al.title, al.hits, al.created_on, 
       u.first_name, u.surname, 
       uf.real_name, uf.user_name, 
       T.guid_id 
FROM album al 
INNER JOIN (SELECT imx.id, aix.album_id, imx.guid_id 
            FROM image imx 
            INNER JOIN album_image aix 
                       ON imx.id = aix.image_id 
            ORDER BY FLOOR(RAND() * (SELECT COUNT(1) 
                                     FROM image))) AS T 
          ON al.id = T.album_id
LEFT JOIN user u 
          ON al.user_id = al.id
LEFT JOIN user_flickr uf 
          ON u.id = uf.user_id
WHERE al.approved ='Yes' 
      AND al.visible ='1' 
GROUP BY T.album_id 
ORDER BY al.title;

我需要一张随机图片来显示每个图库的每次。有很多关系 - 图像,专辑和专辑形象。我需要每张专辑的随机图像,然后按照标题排序相册。我认为内部查询和rand函数非常慢。我查看了临时表,但我不确定这是否是最好的方法。

1 个答案:

答案 0 :(得分:1)

随机排序不是一个好习惯。最好使用LIMIT子句,从应用程序生成一个随机值(甚至可以是一个sql变量),然后请求一条记录。实施例

SELECT * FROM table LIMIT ?, 1;

OR

SELECT * FROM table LIMIT ?, ?+1;
PD:“?”可以是变量或输入参数