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

需求
【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

阅读 4.5k
3 个回答

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

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

  • mysql查出来全部数据后用其他语言进行遍历处理,速度会快很多。统计的维度更好处理。
  • 第一步的缩小范围,是不是可以用select into解决?
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题