【发布时间】:2013-05-20 15:35:31
【问题描述】:
在我的 MySQL 数据库中,我有一个包含超过 1000 万行的表 (PERSONS),两个重要的列是:
- 身份证
- 要点
我想知道 ID = randomid 的人的等级
我想将他的“等级”归还给这个人,这取决于他的积分。 但他的排名不会是确切的行号,而更像是一个百分比层。比如:“你在前 5%”或“你在 10% - 15% 的层”。
当然,我可以通过将行数除以总行数来查询表并将行数转换为层%。但我的问题是,用 LIMIT X, 1 抓取几行是否会更快(有 10M+ 行),其中 X 将是表格百分比 100、95、90、85 .. 上的一行。下一步:检查该行的点数是否低于当前人的点数,如果是,则抓取下一层%行,如果不是,则返回上一层行。
persons 表中有 9 列,其中包含 2 个 bigint、4 个 varchars 150、1 个日期和 2 个布尔值。
当然,我更希望得到确切的行排名,但根据我的测试,这很慢,至少需要几秒钟,而我的 wat 可以在几百秒内完成。
另外,我建议的方式在有多个相同点的层时并不精确,但不需要那么精确,所以我们可以忽略这个事实。
额外信息,我用 PHP 编程,所以如果在 PHP + MySQL 中有特定的解决方案,那也很好。
最后,值得一提的是,该表以每小时 20k 行的速度增长(几乎每天 500k)。
感谢所有帮助。
【问题讨论】:
-
这似乎是关于mysql和百分位数的问题。我说的对吗?
-
是的,我的意思是百分位数。 :)