mysql数据库如何每隔指定数目取一条查询呀?

mysql数据库如何每隔指定数目取一条查询呀?,第1张

语句是有的, 不过运算量较大, 如下, 测试通过

SELECT * from (Select id,(@rowNum:=@rowNum+1) as rowNo From t_user, (Select (@rowNum :=0) ) b order by id asc) as a where mod(a.rowNo, 3) = 1

Select id,(@rowNum:=@rowNum+1) as rowNo From t_user, (Select (@rowNum :=0) ) b order by id asc

这一句是先查结果集, 为每条纪录赋一个行号,

再从该结果集中对行号取余 mod(a.rowNo, 3) = 1

LZ的情况直接用, mod(a.rowNo, 50) = 1 就可以了, 不过无法保证效率

为什么说是臆测呢,因为我猜这并不是问很极端的情况。

详细说来,拆解每个查询消耗的时间,并不是每个步骤都与行数有关。

查1行,查10行,网络通讯都是占大部分时间,所以是10倍。

但是,如果你一次查10w行,并不会比10w次1行快10w倍,因为大数据量查询本来就慢。

延伸一下,以前我们做过一个优化,又来用这个case连续讲了4-5年。

这是一个UPDATE table SET col = col + N WHERE key = ?的查询,大概有5k QPS左右,跑不动。

改成了UPDATE table SET col = col + 1 WHERE key IN (?, ?, ?..... )的样子,数据库CPU从40%降到1%。

这个改变没有改变任何索引使用和网络传输,是不常见的,解析SQL瓶颈。

写这个例子,是要说,优化要根据具体情况分析,数据量和使用情况都会影响结论。

用limit

如select * from 表名 limit 0,1就是获取第一条数据

select * from 表名 limit 1,1就是获取第二条数据

select * from 表名 limit 2,1就是获取第三条数据

以此类推


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/7294618.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存