首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >结果经常发生在快速随机选择查询中。

结果经常发生在快速随机选择查询中。
EN

Database Administration用户
提问于 2015-06-10 17:43:07
回答 1查看 892关注 0票数 0

我有一个查询,在一个网站上显示4张随机照片(我从这里得到了它(当我要求比ORDER BY RAND()更快的东西时):

代码语言:javascript
运行
复制
(SELECT   `p1`.`id`, `p1`.`url`, `p1`.`hits`, `p1`.`created_at`,
    `users`.`username`,
    `users`.`displayname`
FROM     pics p1
JOIN
        (SELECT ceil(rand() *
                (SELECT max(id)
                FROM   pics)) AS id
        ) AS p2
JOIN     users
ON       users.id = p1.user_id
WHERE    p1.id >= p2.id
ORDER BY p1.id ASC limit 1
)
UNION ALL
(
SELECT   `p1`.`id`, `p1`.`url`, `p1`.`hits`, `p1`.`created_at`,
        `users`.`username`,
        `users`.`displayname`
FROM     pics p1
JOIN
        (SELECT ceil(rand() *
                (SELECT max(id)
                FROM   pics)) AS id
        ) AS p2
JOIN     users
ON       users.id = p1.user_id
WHERE    p1.id >= p2.id
ORDER BY p1.id ASC limit 1
)
UNION ALL
(
SELECT   `p1`.`id`, `p1`.`url`, `p1`.`hits`, `p1`.`created_at`,
        `users`.`username`,
        `users`.`displayname`
FROM     pics p1
JOIN
        (SELECT ceil(rand() *
                (SELECT max(id)
                FROM   pics)) AS id
        ) AS p2
JOIN     users
ON       users.id = p1.user_id
WHERE    p1.id >= p2.id
ORDER BY p1.id ASC limit 1
)
UNION ALL
(
SELECT   `p1`.`id`, `p1`.`url`, `p1`.`hits`, `p1`.`created_at`,
        `users`.`username`,
        `users`.`displayname`
FROM     pics p1
JOIN
        (SELECT ceil(rand() *
                (SELECT max(id)
                FROM   pics)) AS id
        ) AS p2
JOIN     users
ON       users.id = p1.user_id
WHERE    p1.id >= p2.id
ORDER BY p1.id ASC limit 1
)

这是快速,但它似乎,一个特定的照片显示太频繁,大约每10次刷新页面,或左右。它没有id 1(它有1131),但是是某个用户的第一张照片。

难道是因为pics表中的空白才是原因吗?我不知道还有什么原因。

编辑:

SELECT id FROM pics WHERE id < 1131 ORDER BY id DESC LIMIT 1;输出如下:

代码语言:javascript
运行
复制
+-----+
| id  |
+-----+
| 923 |
+-----+
EN

回答 1

Database Administration用户

回答已采纳

发布于 2015-06-12 03:45:58

有8种从表中选择随机行的“快速”方法。

有缺口的人工智能可能是最好的选择。

或者是50/10的把戏。

添加浮动列可能对你很好。

等。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/103734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档