gpt4 book ai didi

php - MySQL从两个表中使用JOIN选择随机行

转载 作者:可可西里 更新时间:2023-11-01 07:24:00 25 4
gpt4 key购买 nike

几天来我一直在寻找这个问题的解决方案,但找不到任何可以减少运行查询所需时间的方法。

我有 2 个表:

"product_db":  
unique_id - [index]
image
url_title
status - [index]

"product_page"
id
product_unique_id - [index]
page_id - [index]

我要选择的是来自 product_db 的随机图像,其中 status = 'Online' 并且产品必须位于页面 id = 3 中

product_db 有超过 90,000 种产品,product_page 有超过 150,000 行。

我现在使用的查询是:

SELECT image FROM product_db a, product_page b WHERE b.page_id = 3 AND a.status = 'Online' AND a.unique_id = b.product_unique_id ORDER BY RAND() LIMIT 1

此查询运行大约需要 2.3 秒。加载网页需要很长时间。我尝试了其他一些查询,这些查询首先从 page_id = 3 的 product_page 返回一个随机行,然后查询 product_db(它确实减少了花费的时间)但问题是我无法比较产品是否“在线” .

最佳答案

是排序拖慢了您的速度。与其随机排序,不如随机选择一个 product_db.unique_id

在您的查询中,将 ORDER BY RAND() 替换为:

AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))

如果 unique_id 已从数据库中删除,则使用 >= 而不是 =。结果不像按 rand 排序那样随机,但查询将执行得更快。如果您愿意,您可以使用 = 运行多个查询,直到找到一个结果,并且它仍然可能比对所有这些结果进行排序要快得多。

使用显式 JOIN 它将是:

SELECT product_db.image
FROM product_db
JOIN product_page ON product_db.unique_id = product_page.product_unique_id
WHERE product_page.page_id = 3
AND product_db.status = 'Online'
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
LIMIT 1

关于php - MySQL从两个表中使用JOIN选择随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4209886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com