mysql - ORDER BY 中的索引位置(排名位置)
问题描述
我有一个表敌人,其中一个字段是一个名为“Power”的字段。我有权力作为指标。
列出基于权力的敌人,我会使用
SELECT * FROM enemies ORDER BY Power DESC
现在我想向某个敌人展示基于权力的立场。此外,我想展示超过和低于该值的五个敌人....但我不想读取所有寄存器,直到我感兴趣的那个(数百万个寄存器)。
就像是:
enemy1 1111
enemy2 1100
...
enemysearched 1000
enemyn1 995
.....
一种选择是生成一个排名列并经常计算它,但我只想知道是否有可能仅使用 mysql 以良好的速度。
是否可以不阅读完整表格?
解决方案
...我想向某个敌人展示以权力为基础的地位。
要找到您可以执行的职位:
select count(*) + 1
from enemies e
join enemies f on f.power < e.power
where e.id = 1000 -- the base enemy
此查询将执行 *Index Range Scan" 引擎操作,因此它应该比读取表更快。如果表中有很多行,它仍然可能很耗时。
我还想展示超过和低于这个值的五个敌人......
你可以做:
select f.*
from enemies e
join enemies f on f.power < e.power
where e.id = 1000 -- the base enemy
order by f.power desc
limit 5
union all
select f.*
from enemies e
join enemies f on f.power > e.power
where e.id = 1000 -- the base enemy
order by f.power
limit 5
此查询将执行两次Index Range Scan。两者都应该一直非常快,因为每个都最多读取 5 行。
推荐阅读
- javascript - Puppeteer:如何在没有未定义的情况下将浏览器对象分配给另一个变量?
- python - 在不迭代项目的情况下获取 dict 键的值
- json - 如何使用jq创建一个没有值的干净json模板文件
- python - Flask Celery TypeError: send_() 为参数“time_”获取了多个值
- laravel - Laravel: Designing a DB table for schedules
- javascript - javascript 过滤/搜索 Html 列表
- python - django 获取切片后无法过滤查询
- extjs - 更改时未检查 RadioButton
- json - How do I programmatically find the path for an asset file I have in Angular?
- flutter - 如何在 Flutter 应用中创建堆叠图像的 GridView?