【发布时间】:2014-07-28 17:02:32
【问题描述】:
如何retrieve one record quickly 或如何低效地检索多条记录(通过提取所有 ID)已被详细记录。我想知道从包含数百万条记录的表中检索 N 条记录的最快方法是什么。
我发现有一个 3M 行的 MariaDB 表,提取所有 ID 需要 10 多秒,而通过 rand() 排序需要一分钟以上。这让我认为 N 个单独的随机偏移调用(在找到总表数之后)可能会更快,假设 N 相对较低。我仍然想知道是否有更快的方法,或者如果没有,一些技巧可以在单个查询中进行随机偏移调用。
【问题讨论】:
-
如果您只是拉随机记录,添加 where 子句是否有意义,以便从较小的时间范围内拉出所有“随机”记录,这样 rand 排序将针对较少的记录?说过去 2 周内创建的记录
-
@house9 在某些情况下,它可以。我正在考虑对任何东西进行采样的更通用的情况。
-
执行 30 个查询,随机偏移量和限制为 1,比从 300 万行中选择每个 Id 来打乱它们并取前 30 个查询要快。
-
我想是这样,但 30 次查询似乎也不是很有效,所以我想知道是否有更快的方法。
标签: sql ruby-on-rails performance random sample