如何缩小 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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
1.缩小查询范围,不是按照你的需求,用性别年龄来做谓词条件?
2.不是很明白你要做什么统计,但感觉也不是分组,按照性别年龄筛选,按照城市排序,选择你需要的字段,例如兴趣爱好,身高,视力等。
缩小查询范围也不一定是加子查询这样搞,假设你的子查询没有使用到索引的话,子查询就是全表扫描,这个时候效率反而会降低,还不如写成一个查询。
提升查询速度无非就是让查询语句少进行全表扫描多走索引。多使用
explain
看看执行计划。