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

abc1234679 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

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

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

863

社区成员

5.5w+

社区内容

VB 数据库(包含打印,安装,报表)
社区公告
暂无公告