首页 > 其他分享 >mybatis-flex框架多数据源缺陷以及IN和exists的区别及应用

mybatis-flex框架多数据源缺陷以及IN和exists的区别及应用

时间:2024-01-31 14:55:07浏览次数:28  
标签:flex exists 数据源 查询 索引 mybatis

mybatis-flex框架

多数据源情况下,跨数据源查询,因为没法用在一个queryWrapper查询,所以会需要分步查询,就需要使用到子查询。

众所周知,子查询速度比join查询慢,所以多数据源有该缺陷。

in 关键字,和exist关键字,这两个是相反的。

区别及应用场景

    in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了 ,另外IN时不对NULL进行处理。

总结就是,左表 in 右表;是以右边的数据为先,再筛选; 所以要右边少才好;

左表 exist 右表,是以左边的数据为先,再筛选,所以要左边少才好

标签:flex,exists,数据源,查询,索引,mybatis
From: https://www.cnblogs.com/JavaYuYin/p/17999263

相关文章

  • SpringBoot 整合多数据源的事务问题
    代码先贴代码:核心就是:Spring给我们提供的一个类AbstractRoutingDataSource,然后我们再写一个切面来切换数据源,肯定要有一个地方存储key还要保证上下文都可用,所以我们使用ThreadLocal来存储数据源的keypom.xml<dependency><groupId>org.springframework.boot</gr......
  • SpringBoot实现动态数据源配置
    场景描述:前一阵子接手的新项目中需要使用2个数据源。一个叫行云数据库,一个叫OceanBase数据库。就是说,我有时候查询要查行云的数据,有时候查询要查OceanBase的数据,咋办?废话不多说,下面以mysql为例,开整。一、环境依赖<dependency><groupId>org.springframework.boot</gr......
  • flex-shrink计算上的一些细节
    <!DOCTYPEhtml><htmllang="cmn-hans"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title&g......
  • SQL优化--使用 EXISTS 代替 IN 和 inner join来选择正确的执行计划
       在使用Exists时,如果能正确使用,有时会提高查询速度:     1,使用Exists代替innerjoin     2,使用Exists代替in  1,使用Exists代替innerjoin例子:    在一般写sql语句时通常会遇到如下语句:     两个表连接时,取一个表的数据,一般的写法通过关联查询(inne......
  • 【LeetCode1747. 应该被禁止的 Leetflex 账户】[MySQL 用户变量/Pandas]面向过程编程;
    目录题目地址MySQL代码等效pandas代码题目地址https://leetcode.cn/problems/leetflex-banned-accounts/description/MySQL代码witht1as(selectaccount_id,ip_address,loginastick,"login"asmytypefromLogInfounionallselectaccount_id,ip......
  • MSFlexGrid应用
    SubOnLButtonDown(ByValItem,ByValFlags,ByValx,ByValy)DimobjConnectionDimobjCommandDimobjRecordsetDimstrConnectionStringDimstrSQL,sSQLDimkWh,PFC,kW,A1,A2,A3,V1,V2,V3,Line_Name,Meter_ID,Line_IDDimstrkWh,strkW,strPFC,strA1,strA2,strA3,st......
  • 深度理解 Spring 动态数据源切换是如何实现的
    更新(不是必读,只为了帮助读者更好的理解执行过程)2022-11-16结合事务TransactionInterceptor的执行,剖析数据源是如何切换的详细分析为什么,切面要设置@Order(-9999)属性针对点一回答如下在SpringBoot项目启动的时候,会去扫描所有配置类,生成一个个的Bean,被@Transaction标记的......
  • 多数据源事务——@DSTransactional注解原理
    1.前言在前面的文章中,提到一种手动提交多数据源事务的实现方式,dynamic-datasource包为我们提供了一种更为优雅,开箱即用的注解,即@DSTransactional,因为spring提供的@Tansactional注解是不支持多数据源的,@DSTransactional注解的出现刚好可以很好的弥补这一点。@DS注解和@DSTransacti......
  • 【Mybatis-Plus】Mybatis-Plus多数据源(三)
    参考官网:多数据源|MyBatis-Plus(baomidou.com)使用方法1、引入dynamic-datasource-spring-boot-starter。1<dependency>2<groupId>com.baomidou</groupId>3<artifactId>dynamic-datasource-spring-boot-starter</artifactId>4&l......
  • SpringBoot+dynamic-datasource实现多数据源(msyql、sqlserver、postgresql)手动切换
    场景SpringBoot+MybatisPlus+dynamic-datasources实现连接Postgresql和mysql多数据源:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/135653227上面实现通过注解和配置文件的方式去进行多数据源操作。如果业务需求,比如查询第三方接口时提供的是sqlserver的视图连......