我需要重新优化此查询,这非常慢。
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函数非常慢。我查看了临时表,但我不确定这是否是最好的方法。
答案 0 :(得分:1)
随机排序不是一个好习惯。最好使用LIMIT子句,从应用程序生成一个随机值(甚至可以是一个sql变量),然后请求一条记录。实施例
SELECT * FROM table LIMIT ?, 1;
OR
SELECT * FROM table LIMIT ?, ?+1;
PD:“?”可以是变量或输入参数