MySQL嵌套查询(百万级数据),急~

ahhen 2018-12-11 03:52:37
有一个号码资源的管理需求,具体如下:
字段 number(8位) state(占用 、空闲)
号码数据集:180万 ,全部是连续号码,例如(44210000~46009999)

1. 求该号码集千号段首号码
描述:连续1000个state全为“空闲”的号码集,输出首号码(如44250000~44250999 state全部为空闲,输出44250000)

2. 求该号码集百号段首号码
描述:在非千号段里筛选,连续100个state全为“空闲”的号码集,输出首号码(如44250000~44250099 state全部为空闲,输出44250000)

3.求该号码集整十号段首号码
描述:在非百号段里筛选,连续10个state全为“空闲”的号码集,输出首号码(如44250000~44250009 state全部为空闲,输出44250000)

求各位大神帮忙看下有什么比较好解决的方案,本人按照逻辑写了,性能很差
...全文
420 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
号段首号码只考虑整千整百么
weixin_43682864 2018-12-21
  • 打赏
  • 举报
回复
MySQL的嵌套函数实现起来是比较困难的,尤其是数据量大的时候,可以参考这篇文章的介绍: 《如何协助 MySQL 实现 Oracle 高级分析函数》
邹小青 2018-12-20
  • 打赏
  • 举报
回复
《如何协助 MySQL 实现 Oracle 高级分析函数 》这篇文章里有如何实现MySQL嵌套函数的办法,性能还比较高
仁海 2018-12-12
  • 打赏
  • 举报
回复
以千号段为例

方案一:
建议state:0空闲、1占用,状态值加和为0筛选空闲段。
SELECT number,SUM(state) FROM table
GROUP BY SUBSTR(number,1,5)
HAVING SUM(state)=0


方案二:
先筛选所有空闲,然后分组count数量为1000的段。
SELECT number,count(number) FROM table
WHERE state='空闲'
GROUP BY SUBSTR(number,1,5)
HAVING count(number)=1000


百号段就GROUP BY SUBSTR(number,1,6)

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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