【发布时间】:2020-04-23 14:46:33
【问题描述】:
我对此进行了大量研究,但找不到适合我情况的答案。
我经营一个网站,其中大约 10,000 种产品的详细信息存储在 MySQL 数据库中。这个数字一直在增加,最终可能会达到 20,30 或 40,000 种产品。
我正在重新设计网站,作为其中的一部分,我想展示存储产品的表格中的 10 个随机产品。理想情况下,我想添加分页,如果您愿意,您可以滚动浏览所有 10,000 种产品 - 但分页不是问题。
我找不到从 MySQL 表中获取随机行的有效方法。我已经看到很多提到 RAND() 但它对于超过 100 行的任何东西都非常慢。我已经尝试过诸如根据条目数生成随机数并以此拉动-但这并不能说明是否删除了一行然后找不到结果。这也意味着我必须为 10 个随机行运行该语句 10 次。
我考虑过将所有行存储到一个数组中,然后随机抽取 10 行。但是,每次用户访问此页面时,将最少 10,000 行存储到一个数组中似乎也效率低下。
有人对最好的方法有什么建议吗?我知道我没有在这里发布任何实际代码,但那是因为我没有任何代码。我尝试过的每种方法都不能满足我的需要,或者速度非常慢。
任何建议将不胜感激:(
编辑;我正在运行的使用 Rand() 需要 18 秒的 SQL 查询是:
SELECT Title,Price,Img,Seller,Positive,Negative,Neutral,Glowing,PD,STOCK,StoreItems.ItemURL,Currency,Verified, BTC, ETH, LTC, PayPal, Stripe, Stores.Verified FROM Stores JOIN StoreItems On Stores.StoreID = StoreItems.StoreID INNER JOIN Promotions ON StoreItems.ItemURL = Promotions.ItemID INNER JOIN Gateway ON StoreItems.ItemURL = Gateway.ItemURL WHERE Stores.Verified = 'true' ORDER BY RAND() LIMIT 5
【问题讨论】: