我有一个非常大的表(超过10M甚至100M条记录)具有此架构:idint主键,规则int并希望根据规则选择一个随机条目。我试过这个查询,但这需要很长时间(treenode是表的名称):SELECTtmp.id,tmp.ruleFROMtreenodeLEFTJOIN(SELECT*FROMtreenodeORDERBYRAND())tmpON(treenode.rule=tmp.rule)GROUPBYtmp.rule;将数据作为哈希表保存在内存中会占用大量内存。另一种选择是从数据库中获取每个组并选择一个随机条目。同样,由于组数约为100k,将这些数量的查询发送到数据库需要很长时间。更
摘要与一些同事交谈时,我们遇到了“从大数据库表中提取随机行”的问题。这是一个经典的方法,我们知道天真的方法(alsoonSO)通常是这样的:从mytableorderbyrand()限制1中选择*问题我们还知道这样的查询是完全低效的,实际上只能在很少的行中使用。有一些方法可以用来获得更好的效率,比如theseones仍然是这样,但是它们不会对任意主键起作用,一旦你的数字主键上有洞,随机性就会被扭曲。最后一个被引用的问题的答案链接到thisarticle,它有一个很好的解释和一些很好的解决方案,涉及一个附加的“等分布”表,每当“主数据”表发生变化时必须维护该表。但是,如果您经常删除一个大
我正在使用SAMBroadcaster,它将类别和它们包含的歌曲分开。我想要的是5位随机艺术家的列表,其中随机选择了他们的歌曲,没有重复的艺术家。这是我到目前为止所做的:我有一个名为“经典”的类别:selectIDfromcategorywherename='Classics';返回:11因此,我可以获得类别列表中所有项目的列表:SELECTartist,titleFROMsonglistLEFTOUTERJOINcategorylistonsonglist.id=categorylist.songIDWHEREcategorylist.categoryID=11ORDERBYRAND
我有一个行数据集,每行的“赔率”数都在1到100之间。我希望以最有效的方式进行处理。赔率加起来不一定等于100。我有一些想法。一个)选择整个数据集,然后将所有概率相加并生成一个介于1和该数字之间的随机数。然后循环遍历数据集,从数字中扣除几率,直到它为0。我希望尽量减少对数据库的影响,所以我考虑是否可以只选择我需要的行。二)SELECT*FROMtableWHERE(100*RAND())我考虑过LIMIT0,1但是如果项目具有相同的概率,则只会返回其中一个或者获取整个数据集并从那里随机选择一个......但是赔率会受到影响,因为它变成了有赔率的随机数,然后是没有赔率的随机数,因此赔率变
我之前曾提出过这个问题,但在做了一些研究之后,我意识到我找错了地方。这是情况。我创建了这个表:CREATETABLEPC_Contacts(POCVARCHAR(255)PRIMARYKEYNOTNULL,Phone_1VARCHAR(255),Phone_2VARCHAR(255));我将一个CSV文件导入MySQL,其中包含我的表PC_Contacts的值:USENetworkLOADDATAINFILE'C:\\ProgramData\\MySQL\\MySQLServer5.7\\Uploads\\PC_Contacts.csv'INTOTablePC_ContactsFIEL
我试图在MySQL中随机获取一行。这是我的方法:SELECT*FROMusersWHEREid=(SELECTfloor((max(id)-min(id)+1)*rand())+min(id)FROMusers);当id中存在间隙时,这可能会返回一个空集。我对此很好。然而,我没有间隙,而且我仍然经常空集。更令人不安:我偶尔会得到两个或更多结果。这种奇怪行为的原因是什么?怎么样,我做对了吗?注意:table很大(10^6...10^7);我不能使用任何基于随机排序甚至基于count()的明显且已知的解决方案。我受困于MySQL,我不在乎它是如何在客户端ruby/PHP/任何东西上完成
我有一个相当大的数据集和一个需要两个连接的查询,因此查询的效率对我来说非常重要。我需要从数据库中检索满足基于连接结果的条件的3个随机行。Mostobvioussolution被指出效率低下here,因为[thesesolutions]needasequentialscanofallthetable(becausetherandomvalueassociatedwitheachrowneedstobecalculated-sothatthesmallestonecanbedetermined),whichcanbequiteslowforevenmediumsizedtables.但是,
我被要求获取与用户在他的元素中拥有的东西相关的东西就数据库创建而言,此项目表存储类别名称,我想获取类别名称并将其保存到数组中然后做一个for循环并从中得到一个随机值然后从mysql数据库中随机获取一行,这样任何人都知道如何做到这一点换句话说,我想知道如何从数组中获取随机值,并从mysql中获取随机行提前致谢。 最佳答案 使用$rand_keys=array_rand($input,1);参见示例http://php.net/manual/en/function.array-rand.php用于php和mysqlSELECT*FROM
注意:我是PHP初学者,这就是为什么下面的代码可能不好。嗨。我现在正在使用这段代码来选择9个唯一的随机行,它工作正常。$quCountRows=$database->query("SELECT*FROMapproved")->rowCount();$arrRandomPictures=array();while(count($arrRandomPictures)query("SELECTpicName,picTypeFROMapprovedWHEREid='".$arrRandomPictures[0]."'")->fetch(PDO::FETCH_ASSOC);$quRandomPi
我希望能够从数据库中提取15条左右的记录。我发现随着数据库变大,使用WHEREid=rand()会导致性能问题。我见过的所有解决方案都适合选择单个随机记录。我想得到倍数。有人知道对大型数据库执行此操作的有效方法吗?编辑:进一步编辑和测试:我使用MyISAM在新数据库上创建了一个相当简单的表。我给了这3个字段:autokey(无符号自动数字键)bigdata(大blob)和somemore(中等int)。然后我将随机数据应用到表中并使用Navicat运行了一系列查询。以下是结果:查询1:select*fromtestorderbyrand()limit15Query2:select*fr