zoukankan      html  css  js  c++  java
  • syf的开发笔记-3 分页功能的sql优化

    这两天一直在优化一个sql

    这个功能是要展示出一些任务信息

    核心问题在于任务和项目组是一个一对多的关系

    项目组和项目的关系join进来之后

    每个任务就会查出来多条了

    然后分页逻辑就错了

    所以这里的解决方法是

    先按限制条件group by出来这一页要有哪些任务

    然后对于这些任务再按这些条件查找一次 并筛选出相应字段

    这样就把一个大问题简化成了只有几十个任务的小问题

    对于这几十个任务 还是要查出来这些任务所属项目的项目组

    这又是一个一对多的关系

    一种方案是用group成string的方式 我觉得不太好就没用

    因为这样就把负担抛给了前端 这个负担没什么必要

    另一种就是查出每个项目对应的项目组

    在代码中处理成List之后 appand回返回的数据中

    因为项目不是很多 这里可以做一个缓存

    这样查一次就够了 减少了很多查询次数

    感觉说的还是有点乱

    但核心思想还是很简单的

    一个复杂的sql最好要拆解成更小的任务去解决

    就像先把整个的大任务分解成这一页的数据

    把所有的项目和项目组的关系分解成这一页的项目的数据

    要不表join太多太慢

    也可能出现一些冗余数据不好处理

    同时代码处理要比数据库交互要快

    也减少了数据库的交互压力

    一开始我还用map做了一个cache

    但是这需要在for里反复调用同一个sql

    这样效率就不如在sql里直接in (?)

    按我这样的写法可能效率反而下降了

    要尽量减少查询次数

    虽然一个小的功能写了这么久 但还是很有意思的

  • 相关阅读:
    2020年12月学习记录
    Data Protection Application Programming Interface滥用攻击
    另类的缓存凭证收集
    js获取地址栏参数,携带参数跳转页面
    用JS获取地址栏参数的方法
    解决vue加载时闪烁
    vue-cli-service build 不同环境配置
    vite创建vue3.x项目报404的解决方案
    后端开发完接口才给出接口文档,合理吗?
    API研发实现规范化管理的价值
  • 原文地址:https://www.cnblogs.com/general10/p/12194165.html
Copyright © 2011-2022 走看看