简化问题(没有上下文)是粗体文字,因为我倾向于过度详述
我处于需要从非常动态的查询结果中选择随机记录的情况。对于这个问题,我们假设查询可以产生0到100,000个结果(包括0和100,000)。现在我已经阅读了一些关于选择随机行的内容,我理解随机排序非常低效。我发现的解决方案的问题是,我不能假设数据不会有漏洞或均匀分布。
由于查询可能产生0结果,因此我计划事先计算特定查询的结果,以便可以正常运行。如果得到结果,我正在考虑使用应用程序层生成1和计数之间的随机数,并将其用作限制语句中的偏移量以获取我的随机结果(因为我不知道PK的有问题的那一行)。
但是,作为mysql的新手,我对操作的相对性能知之甚少,并且不知道偏移如何影响速度。会选择
LIMIT 950000, 1
执行速度比
慢得多LIMIT 1
而且,如果可以的话,您是否会认为性能影响非常大,我需要找到一种实现目标的替代方法?
note 将生成这些随机行的查询可能包含超过10,000个排列。我想不出一种方法可以将数据组织成具有连续,均匀分布的记录的单独表格,就像我发现的随机选择的所有解决方案一样。
非常感谢你的时间。