当前位置: 首页 > news >正文

无锡网站推广公司排名国家卫健委最新疫情报告

无锡网站推广公司排名,国家卫健委最新疫情报告,网站建设的部署,深圳坪山最新消息如题 效率慢疑惑 效率慢 分页查询,发现效率很慢,然后发现是比较复杂的sql,CountJSqlParser45它不会帮忙优化掉,就是select多少字段它count的时候也还是这么多字段 框架里的用法是这样的 所以去看了CountJSqlParser45里面的代码,发现如果有group之类的,它就不帮忙把count优化…

如题

  • 效率慢
  • 疑惑

效率慢

分页查询,发现效率很慢,然后发现是比较复杂的sql,CountJSqlParser45它不会帮忙优化掉,就是select多少字段它count的时候也还是这么多字段
框架里的用法是这样的
在这里插入图片描述

所以去看了CountJSqlParser45里面的代码,发现如果有group之类的,它就不帮忙把count优化一下,直接在外面套了一层count(0)

知道问题之后就是覆盖这个方法,所以在自己的下面新建了一个同路径同名的覆盖它
在这里插入图片描述
原来的代码是发现不是简单sql就直接不处理了,现在的逻辑是发现是PlainSelect但是不是isSimpleCount的情况下,把查询里面的select的普通字段都去除掉,新写了cleanSimpleField这个方法
在这里插入图片描述

逻辑很简单,如果是比较复杂的字段还留着,因为可能会影响结果,比如函数啊别名啊之类的,但是如果只是简单的字段都去掉,如果发现都是简单字段,那么直接用1来代替

    public List<SelectItem> cleanSimpleField(PlainSelect select){//因为查询太多的话会导致速度很慢,所以移除掉普通的字段,把肯能影响结果的字段留下来List<SelectItem> newSelectItems =new ArrayList<>();//遍历原来的select 然后把需要的留下for (SelectItem item : select.getSelectItems()) {//select列中包含参数的时候不可以去掉,否则会引起参数个数错误if (item.toString().contains("?")) {newSelectItems.add(item);}//如果查询列中包含函数,也不可以,函数可能会聚合列if (item instanceof SelectExpressionItem) {Expression expression = ((SelectExpressionItem) item).getExpression();if (expression instanceof Function) {String name = ((Function) expression).getName();if (name != null) {String NAME = name.toUpperCase();if (skipFunctions.contains(NAME)) {//go on} else if (falseFunctions.contains(NAME)) {newSelectItems.add(item);} else {for (String aggregateFunction : AGGREGATE_FUNCTIONS) {if (NAME.startsWith(aggregateFunction)) {falseFunctions.add(NAME);newSelectItems.add(item);}}skipFunctions.add(NAME);}}} else if (expression instanceof Parenthesis && ((SelectExpressionItem) item).getAlias() != null) {//#555,当存在 (a+b) as c 时,c 如果出现了 order by 或者 having 中时,会找不到对应的列,// 这里想要更智能,需要在整个SQL中查找别名出现的位置,暂时不考虑,直接排除newSelectItems.add(item);}}}//都是简单的都被去掉了,那么就把原来的第一个拿来if (ObjectUtil.isEmpty(newSelectItems)){newSelectItems.add(new SelectExpressionItem(new Column("1")));}return newSelectItems;}

疑惑

照理说LocalMySqlDialect里面改成自己的新的类,不是CountJSqlParser45应该也行的,但是不知道为什么我把CountJSqlParser45改成自己新写的类不行,所以只能用覆盖的方式了

this.countSqlParser = ClassUtil.newInstance(properties.getProperty("countSqlParser"), CountSqlParser.class, properties, CountJSqlParser45::new);
//改成下面这个不知道为什么不行
```c
this.countSqlParser = ClassUtil.newInstance(properties.getProperty("countSqlParser"), CountSqlParser.class, properties, MyCountJSqlParser45::new);

http://www.sczhlp.com/news/33889/

相关文章:

  • 做平台的网站有哪些内容吗百度校招
  • 小榄公司网站建设创意营销案例
  • 大模型推理加速策略分析
  • 有什么可以做cad赚钱的网站需要留电话号码的广告
  • 网站建设工作整改报告什么是seo搜索
  • 网络营销的含义和特点电脑优化软件哪个好用
  • 阿里云wordpress搭建网站第一推广网
  • iis做本地视频网站深圳网络推广公司有哪些
  • 网站架构设计师工资水平百度竞价开户3000
  • 做网站颜色类型是啥广告公司取名字参考大全
  • 做任务赚q红包的网站互联网媒体广告公司
  • 网站开发公司怎么选择网站服务器多少钱一年
  • 动效h5网站产品软文是什么
  • wordpress 主题 ftp郑州seo技术
  • 网站优化之站外优化技巧山东省住房和城乡建设厅
  • 天津网站制作维护自动化测试培训机构哪个好
  • 网站建设 是否计入固定资产seo关键词排名怎么优化
  • 长沙专业网站设计公司深圳全网营销平台排名
  • 做公司网站用哪个公司比较好推介网
  • 做网站 (公司)seo网站推广经理
  • 网站过度优化海淀区seo搜索引擎
  • 做视频网站为什么费钱石家庄网络推广平台
  • 什么是域名解析seo网站优化详解
  • 绞铜机 东莞网站建设搜狗竞价
  • Linux命令拾遗-top中的%nice是啥
  • ubuntu24.04+RX570使用ollama跑大模型
  • 在中山网长沙seo优化服务
  • wordpress用户前端发文裤子seo标题优化关键词
  • 拒绝做网站的理由石家庄网站关键词推广
  • 网站商城微信支付接口申请网站seo系统