一个list中有很50W的uuid,如何根据uuid在100W的数据库中快速匹配出这50Wuuid对应的数据并返回

select DISTINCT

            t.CATARC_CODE AS catarcCode,

            t.CCS5 AS ccs5,

            t.VEC_MOD AS vecMod,

            t.VEC_NAME AS vecName,

            t.AUTO_PRICE AS autoPrice,

            f.CLXH AS clxh,

            a.AUTOMARKER_NAME AS automarkerInfo,

            t.DRIVE_WAY AS driveWay,

            t.MODEL_YEAR AS modelYear,

            t.VEC_CONFIG_DETAIL AS vecConfigDetail,

            t.EXTEND_INFO AS extendInfo,

            f.CLZZRQ AS vinTime,

            t.ENGINE_MOD AS engineMod,

            f.RLZL AS oilWay,

            t.VEC_MOD_TYPE AS vecModType,

            t.BODY_STRUCT AS bodyStruct,

            f.FDJXH AS fdjxh,

            f.FDJH AS fdjh,

            f.LTGG AS ltgg,

            t.AUTOMARKER_ID AS automakerId,

            f.CSYS AS csys,

            f.PFBZ AS pfbz,

            f.EDZK AS edzk,

            f.WKC AS wkc,

            f.WKK AS wkk,

            f.WKG AS wkg,

            f.ZJ AS zj,

            f.PL_L AS plL,

            f.QLJ AS qlj,

            f.HLJ AS hlj,

            f.ZZL AS zzl,

            f.ZBZL AS zbzl,

            f.GL AS gl,

            f.YH AS yh,

            f.LTS AS lts,

            f.ZH AS zh,

            f.ZS AS zs,

            f.SYXZ AS syxz

  from T_PVEC_STD t,
  (select
    t.CATARC_CODE,
    t.CLXH,
    t.VIN,
    t.clzzrq,
    d.FDJXH,
    d.FDJH,
    d.LTGG,
    d.RLZL,
    d.CSYS,
    d.PFBZ,
    d.EDZK,
    d.WKC,
    d.WKK,
    d.WKG,
    d.ZJ,
    d.PL_L,
    d.QLJ,
    d.HLJ,
    d.ZZL,
    d.ZBZL,
    d.GL,
    d.YH,
    d.LTS,
    d.ZH,
    d.ZS,
    d.SYXZ
    from T_VIN_INFO t left join T_VIN_FDJ d on d.vin = t.vin) f,
  T_AUTOMAKER_INFO a
  where f.CATARC_CODE = t.CATARC_CODE
  and t.AUTOMARKER_ID = a.AUTOMARKER_ID and  f.vin = #{analysisExcelVO.vinCode}

uuid不是主键的话建立索引。然后list分割大小一万。循环查数据库select * from table where uuid in (1,2,3);
另外,你这50万条业务数据一定不能放在一个list中(内存溢出风险,不提倡),应该每一万条业务处理一次。

1、利用数据的join,找到存在uuid
50w的uuid入库,然后与100w的uuid进行内连接。
2、根据存在的uuid个数进行选择不同的策略
为了防范内存溢出,将结果进合理分割多个小集合,对每个集合进行业务处理。

首先,要分清你的50W数据的list是存储在内存的还是存储在数据库的;
1. 在内存的(当然,50W数据存内存本身有不合理性,数据太大容易崩): 分批取出50W数据,多少批你自行决定,一定要分批; 然后将取出的批次数据作为蓝本去数据库进行匹对,匹对方式有2种:(1) 将蓝本数据插入到临时表,然后以临时表为主表,去内连接关联100W数据的表; (2)将蓝本数据作为集合,用100W数据表的in去过滤,但此方法性能差,不建议,仅作为一种方式存在;
2. 在数据库的,直接用50W数据的作为主表,内连接关联100W数据的大表;
以上两种方式,都需要分批次取值(类似于分页), 将每次取出的数据存储下来(比如一波一波插入到excel,或者其他存储方式等等)即可;
关键掌握两点:I. 分批取值; II. 表内连接提升效率;

50万数据入临时表,uuid的列做索引

你的主表的uuid也做索引

然后做inner join(内部基于hashtable,算法复杂度O(NLogN})即可。

正常情况下,可以在10秒钟内完成。