千万级(和亿级)mysql多条件查询(根据用户名、排序、从第n开始取s行)语句如何优化

「已注销」 2020-02-20 03:08:55
我知道 分很少,剩33分,可我知道330分也顶不上各位老师的回答,看在我是VB区的老菜鸟,各位老师帮帮忙!

问题:

我想查询数据库中aaa表,账号名为abc123的数据,并按照id正排序,返回从第n行开始的100条数据。

现在我的写法如下(从1000000行开始的100条数据):

SELECT * FROM aaa WHERE user=abc123 order by id asc limit 1000000, 100

结果执行一次花费很长时间,
百度搜的优化方法都是单条件优化。

请问如何多条件优化语句?拜求啊
...全文
885 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
少侠露飞 2020-03-12
  • 打赏
  • 举报
回复
limit改成根据id的between and
脆皮大雪糕 2020-03-12
  • 打赏
  • 举报
回复
user 字段有索引吗
冰不孤独 2020-03-11
  • 打赏
  • 举报
回复
得关注MYSQL 容量查询瓶劲呀!当然还是得分表来解决!
X-i-n 2020-02-20
  • 打赏
  • 举报
回复
上亿级就应该分库分表了。你的库已经在用了,能动的地方不多,无非对查询列做一下索引。尽量别用模糊查询,如果完全避免模糊查询,就可以建hash索引。查询字段也精准给出,别用*。如果有查询嵌套,不要在多个子查询里重复查询,子查询里尽早把范围压缩下来,把尽可能小的结果集带进后续查询里。说起来挺空泛的,逐条试试吧。
「已注销」 2020-02-20
  • 打赏
  • 举报
回复
现在查询几次够看一部电影了。。。
「已注销」 2020-02-20
  • 打赏
  • 举报
回复
引用 1 楼 X-i-n 的回复:
上亿级就应该分库分表了。你的库已经在用了,能动的地方不多,无非对查询列做一下索引。尽量别用模糊查询,如果完全避免模糊查询,就可以建hash索引。查询字段也精准给出,别用*。如果有查询嵌套,不要在多个子查询里重复查询,子查询里尽早把范围压缩下来,把尽可能小的结果集带进后续查询里。说起来挺空泛的,逐条试试吧。
首先谢谢您的回答,刚开始我也想到分表了,但是数据已经存在了,再区分改逻辑很麻烦的,如果速度降不下来只能大修

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧