gpt4 book ai didi

MySQL:从表中快速选择N个随机行,其中列对(不是列)是唯一的

转载 作者:行者123 更新时间:2023-11-29 14:07:11 24 4
gpt4 key购买 nike

有一个表包含这样的列:

id、person_id、pet_id、描述

关于这个表有一些说法:

  1. id为主键,自增
  2. 每对(person_id、pet_id)都是唯一的
  3. id、person_id、pet_id 为整数且不为 NULL
  4. “漏洞”是可能的(max pet_id 并没有告诉我们有这样的 person_id 的总(最大)列数)
  5. 表中很可能有更多不同的 person_id,即每个人的 pet_id 的平均数量。

问题是:如何快速选取当前person_id的随机N个pet_id?

表格示例:

1.  1   1     cat
2. 1 2 dog
3. 2 40 horse
4. 2 35 dog
5. 3 46 duck
6. 2 39 duck
7. 1 3 duck
..................
100000 403 12 monkey

示例:我想为第二个人选择两个随机行。可能的随机选择之一是第 3 行。和第 6 行。选择应该是真正的“随机”(应该以相同的概率出现)。

如何使用 mysql 查询 SELECT 来做到这一点?

附注当然,我读过有关从表中选择几个随机行的内容,这是一些棘手解决方案的基本问题。但是,就我而言,有两行,而不是一行。

我正在考虑一种更快的方法

select id from tablename where person_id = 2 order by random()  limit 2;

最佳答案

你的稻草人查询已经尽力了。如果您没有养很多宠物的人(并且您在 person_id 上有索引),它应该运行得相当快。如果你身边真有这样的人,那你就倒霉了。忘记随机选择,即使确定一个人有多少只宠物也需要时间 O(# pets)。

另一个可能不适合您的想法:如果您不关心选择的独立性(即,您可能每次都会得到相同的随机响应),那么您可以添加一列插入行时用随机数填充。在 person_id,random_column 上添加索引,并选择按该对排序的前 N ​​行。稍微好一点的方法是添加多个随机列并随机选择一个列进行排序。不幸的是,这不能很好地扩展,我认为您不会对结果感到满意。

关于MySQL:从表中快速选择N个随机行,其中列对(不是列)是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14176942/

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