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

做外贸怎么看外国网站黑龙江暴雪预警

做外贸怎么看外国网站,黑龙江暴雪预警,淘客wordpress数据,兰州市做网站建设的公司开发工作中,我发现一个现象,比喻下面的两个语句: 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://www.dtcms.com/wzjs/513723.html

相关文章:

  • 手机网站前端天津网站优化公司
  • 梁山县网站建设注册网站的免费网址
  • 企业网站开发多少钱百度竞价seo排名
  • 网站是怎么做排名的专业网站优化公司
  • 怎么做本地化网站建站教程
  • .net美食网站开发源代码凤凰军事新闻最新消息
  • 辽宁大连网站建设免费网站谁有靠谱的
  • 网站的登录注册页面怎么做的常州seo博客
  • 做太空泥的几分钟网站线上推广费用
  • 马蹄室内设计网站中国网站排名查询
  • 企业网站备案需要多久seo教程技术
  • 网站如何进行推广网站的网络推广
  • 网站开发需要考虑哪些方面sem是什么意思?
  • 装饰工程包括哪些主要内容平台seo什么意思
  • wordpress汉化主题下载网站seo文章
  • 免费 网站 如何做信息流投放
  • 广州 网站制作营销活动方案
  • 做网站什么最重要宁波seo服务推广
  • 网站建设与会展哈尔滨seo关键词排名
  • vs2013可以做网站么线下推广方法及策略
  • 黑龙江建设人力资源网站做网站排名优化的公司
  • 外国网页设计网站个人博客网站设计毕业论文
  • 用asp做的网站如何运行媒体代发网站
  • 旅游网站建设ppt模板下载台州优化排名推广
  • 做网站广告有哪些职位成都网站建设方案托管
  • 免费网站商城模板北京seo优化诊断
  • 网站设计的分辨率seo入门教程
  • 品牌设计就业前景怎么样浙江seo技术培训
  • 做网站外包公司名称大全seo相关ppt
  • 简约个人网站长春网站建设公司哪家好