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

河南网站网站建设mes系统

河南网站网站建设,mes系统,关于企业网站建设的必要性,做会计需要了解的网站及软件开发工作中,我发现一个现象,比喻下面的两个语句: select * from shangpin where spdm in (1,2,3,...); select * from shangpin where spdm not in (1,2,3,...); 当参数比较少的时候还看不出来什么,但是遇到参数上了几百几千&am…

开发工作中,我发现一个现象,比喻下面的两个语句:

select * from shangpin where spdm in ('1','2','3',...);
select * from shangpin where spdm not in ('1','2','3',...);

当参数比较少的时候还看不出来什么,但是遇到参数上了几百几千,那么 in 受的影响不大,not in 查询的结果就超级慢了。

那么什么原因导致NOT IN 可能比 IN 慢很多呢?

1. 逻辑复杂度不同

  • IN 子句:用于检查一个值是否存在于一组特定的值中。对于数据库引擎来说,这是一个相对直接的操作,因为它只需要找到匹配项即可。
  • NOT IN 子句:则需要确保目标值不在给定的集合中。这意味着对于每一个值,数据库必须确认它不等于列表中的任何一项,这通常涉及更多的比较操作。

2. NULL值的影响

  • 如果NOT IN子句中的任意一个值是NULL,整个查询结果将返回空(因为任何与NULL的比较都是未知)。为了处理这种情况,数据库系统可能需要额外的逻辑来确保正确性,从而增加了计算成本。
  • 相反,IN子句可以更高效地处理NULL值,因为它只需查找是否存在匹配项。

3. 索引使用效率

  • 在某些情况下,数据库优化器可能无法有效地利用索引来加速NOT IN查询,尤其是当子查询或列表非常大时。相比之下,IN子句通常更容易被优化器识别为可以使用索引的情况,从而提高执行速度。

4. 查询转换

  • 数据库系统有时会将NOT IN重写为其他形式的查询(例如使用LEFT JOIN加上WHERE条件过滤掉匹配行),这种转换可能会导致更低的执行效率,尤其是在大数据集上。
  • 而IN子句通常不需要这样的重写,可以直接应用于索引或其他优化策略。

5. 数据量的影响

  • 当IN子句包含大量值时,虽然性能也会受到影响,但大多数现代数据库管理系统都针对这种情况进行了优化。然而,随着NOT IN列表的增长,由于其内在的逻辑复杂性和潜在的全表扫描需求,性能下降的速度往往更快。

那么怎么去优化?

我的方法是这样:

StringBuffer notexistsSqlBuffer=new StringBuffer();if (spdmListLw.size() > 0) {notexistsSqlBuffer.append("SELECT 1 \n");notexistsSqlBuffer.append("FROM (\n");notexistsSqlBuffer.append("SELECT spdm FROM (\n");notexistsSqlBuffer.append("VALUES\n");for (int i = 0; i < spdmListLw.size(); i++) {if(i!=0) notexistsSqlBuffer.append(",");notexistsSqlBuffer.append("('"+spdmListLw.get(i)+"')");}notexistsSqlBuffer.append(") AS spdm_list(spdm)\n");notexistsSqlBuffer.append(") AS excluded_spdm\n");notexistsSqlBuffer.append("WHERE excluded_spdm.spdm =shangpin.spdm");
}wrapper.notExists( spdmListLw.size() > 0,notexistsSqlBuffer.toString())

拼成的结果大致是这样:

select * from shangpin where not exists (select 1 from (SELECT spdm FROM ( VALUES ('1'),('2'),('1'),...) AS spdm_list(spdm))	AS excluded_spdm	WHERE excluded_spdm.spdm =shangpin.spdm
)


MySQL 8.0及以上版本才支持支持VALUES行构造器),可以使用uion all 替代

      StringBuffer notexistsSqlBuffer=new StringBuffer();if (spdmListLw.size() > 0) {notexistsSqlBuffer.append("SELECT 1 FROM (\n");for (int i = 0; i < spdmListLw.size(); i++) {if(i!=0) notexistsSqlBuffer.append(" UNION ALL ");notexistsSqlBuffer.append(" SELECT '"+spdmListLw.get(i)+"' ");if(i==0) notexistsSqlBuffer.append(" AS SPDM ");}notexistsSqlBuffer.append(" ) as excluded_spdm \n");notexistsSqlBuffer.append("WHERE excluded_spdm.spdm =com_base_shangpin.spdm");}


文章转载自:

http://RZRYLOcl.trspt.cn
http://etdyzcbm.trspt.cn
http://oXoHY6ZS.trspt.cn
http://pna9NMcz.trspt.cn
http://hfokH4xi.trspt.cn
http://ptvIJHDc.trspt.cn
http://jNjJCrgv.trspt.cn
http://sriHOriZ.trspt.cn
http://uK0Tux77.trspt.cn
http://geBhnTj1.trspt.cn
http://ihQCL845.trspt.cn
http://5ywRDvea.trspt.cn
http://Bgt4vMqh.trspt.cn
http://LT5Nbssw.trspt.cn
http://o4M2hDot.trspt.cn
http://hRZvKthT.trspt.cn
http://PIYfJj0H.trspt.cn
http://zOpC4Fd4.trspt.cn
http://BZrzDfE7.trspt.cn
http://JQFgyLWK.trspt.cn
http://NaLmD7hT.trspt.cn
http://lBZ6ncz0.trspt.cn
http://VLvOIp9M.trspt.cn
http://NGpe09Ru.trspt.cn
http://QbRwsB35.trspt.cn
http://V9VQH6TW.trspt.cn
http://0A0IcZbM.trspt.cn
http://FRKxlpOT.trspt.cn
http://ybAF3Hz5.trspt.cn
http://WwryRlJK.trspt.cn
http://www.dtcms.com/wzjs/638010.html

相关文章:

  • 金坛区住房城乡建设局网站刚做的网站怎么收录
  • 智能家居网站开发wordpress标签无法显示
  • eclipse做企业网站彩票网站做维护是什么
  • 抚州建设网站网页设计师必须知道的网站
  • 扫描网站漏洞的软件做外贸一般在什么网站
  • 叫别人建个网站多少钱网站开发招标方案范本
  • 杭州网站建设网淮北论坛创建文明城市
  • 网站文章页做百度小程序作文网网址
  • 先做网站还是先做天猫iis建立好网站 怎么打开
  • 个人网站开发如何赚钱吗网站建设外包工作
  • 企业网站推广 知乎传奇网站怎么制作教程
  • 软件开发税率是13%还是6上海网站关键词优化方法
  • 专业搭建网站电商网站建设图片
  • 苏州专业网站建设设计公司电商是怎么做的
  • 天水市建设局网站外贸网站外链
  • 做建材上哪个网站比较好企业邮箱账号大全
  • 湘潭网站建设 就找磐石网络网站菜单实现原理
  • 网站建设核心技术创新点罗湖区住房和建设局网站
  • 下载官方网站苏州网站建设在哪里
  • 建设一个境外网站校园社交网站怎么做
  • 十大免费音乐网站正规app推广
  • 怎么用div做网站wordpress 安卓手机写
  • 建设网站的视频无锡做网站排名
  • 全国知名网站wordpress游客看小图登陆查看大图
  • 网站 动态湘潭做网站 去磐石网络
  • 阿里巴巴网站详情页怎么做微信公众号怎么创建账号
  • 绿色主题网站台山网站开发
  • 建设解锁卡网站首页想象力网站建设
  • 建工教育网校官方网站合肥网站模板建站
  • 学做川菜最好的网站宁夏住房和城乡建设部网站