如何缩小 sql 查询范围,sql 查询优化

发布于 2022-09-11 20:31:14 字数 513 浏览 24 评论 0

需求
【1】有个20w的人员信息数据集(data),包括性别,年龄,省市等数据
【2】查询特定性别,特定年龄下的各省份的人员统计数据

个人思路
【1】先从20w的数据集中,找过特定性别,特定年龄下的人员信息。如20岁男生。得到数据集(data-after-filt),假设仅剩 5w 条符合的数据。
【2】再遍历各城市(366个),针对(data-after-filt)进行统计查询,如查询,兴趣爱好,身高,视力等。
【3】通过步骤1,将缩小查询范围,减少数据遍历的总次数。366 5w < 366 20w。从而优化查询速度

遇到的困难,求助
【1】mysql 怎么实现步骤一,缩小待查询范围?
【2】目前做法是,先建立一个主查询,再外面套一层子查询实现。这种方式是否有效?(个人感觉并没有用,反而每次都多了个主查询的操作。代码上得到了复用,但 sql产生了冗余)
每次都要进行主查询,再子查询。
如: SELECT FROM ( SELECT FROM xxx) xxx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

南…巷孤猫 2022-09-18 20:31:14

1.缩小查询范围,不是按照你的需求,用性别年龄来做谓词条件?
2.不是很明白你要做什么统计,但感觉也不是分组,按照性别年龄筛选,按照城市排序,选择你需要的字段,例如兴趣爱好,身高,视力等。

哎呦我呸! 2022-09-18 20:31:14

缩小查询范围也不一定是加子查询这样搞,假设你的子查询没有使用到索引的话,子查询就是全表扫描,这个时候效率反而会降低,还不如写成一个查询。
提升查询速度无非就是让查询语句少进行全表扫描多走索引。多使用explain看看执行计划。

场罚期间 2022-09-18 20:31:14
  • mysql查出来全部数据后用其他语言进行遍历处理,速度会快很多。统计的维度更好处理。
  • 第一步的缩小范围,是不是可以用select into解决?
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文