目录背景思路代码模型附带测试对比背景条件查询可能的两种查询方式第一种select a,b from Table where c in(1,2);第二种select a,b from Table where c 1select a,b from Table where c 2查询两次。如果条件c的数据并不多则完全可用第二种。但是如果in中的参数非常多呢单个查询显然极其耗费时间且从常理推断如果用in则不可能也不能直接in里面写几百、几千甚至几万个参数in中所携带参数大于200性能有所下降这种情况下如何处理到底行不行往后看、思路代码模型使用in分批传入参数一批比如200个参数代码如下start : 0 for i : 0; i selectCount; { i start 200 if i (selectCount - 1) { i selectCount - 1 } Log.Logf(2, reset: start%v, i%v, selectCount%v, start, i, selectCount) thisBatch : list[start:i] if len(thisBatch) 0 { continue } str : strings.Join(thisBatch, ,) var obj []XxxYy if err db.Raw(select a,b from table where c in( str )).Find(obj).Error; err ! nil { code cm.DbExecError return } infoList append(infoList, obj...) if i selectCount-1 { break } start i }由此大批量的数据都可快速查出来!附带测试对比实际数据要查询的参数为5万5千条结果如下一次查询一个查完需耗时3054秒使用in批量查询当in中参数数量为500时只耗时5秒钟即可查完。对比非常明显下面是各个数量下的耗时数据450时测试结果以毫秒展示通过实践在使用框架的基础下发现in中的参数可以很大整体情况看数量越大效率越高以下是验证结果50耗时52秒, 0分钟 100耗时25秒, 0分钟 150耗时18秒 180耗时15秒, 0分钟 200耗时13秒, 0分钟 230耗时12秒, 0分钟 250耗时11秒, 0分钟 280耗时9秒, 0分钟 300耗时10秒, 0分钟 350耗时8秒, 0分钟 400耗时7秒, 0分钟 450耗时6396毫秒 500耗时5350毫秒 550耗时4674毫秒 600耗时4619毫秒 650耗时4180毫秒 700耗时3977毫秒 750耗时3593毫秒 800耗时3577毫秒 850耗时3192毫秒 900耗时2901毫秒 950耗时3334毫秒 1000耗时2841毫秒 1100耗时2378毫秒 1200耗时2188毫秒 1300:耗时2381毫秒 1400:耗时2112毫秒 1500:耗时2082毫秒 1600:耗时2044毫秒 1700:耗时1803毫秒 1800:耗时1652毫秒 1900:耗时1793毫秒 2000:耗时1609毫秒 2100:耗时1494毫秒 2200:耗时1570毫秒 2300:耗时1381毫秒 2400:耗时1414毫秒 2500:耗时1379毫秒 2600:耗时1311毫秒 2700:耗时1530毫秒 2800:耗时1333毫秒 2900:耗时1239毫秒 3000:耗时1225毫秒 3100:耗时1352毫秒 3200:耗时1319毫秒 3300:耗时1373毫秒 3400:耗时1347毫秒 3500:耗时1234毫秒 3700:耗时1197毫秒 4000:耗时1143毫秒 4500:耗时1242毫秒 5000:耗时1089毫秒 6000:耗时1081毫秒 6500:耗时1067毫秒 7000:耗时958毫秒 8000:耗时957毫秒 8500:耗时896毫秒 9000:耗时924毫秒 9500:耗时947毫秒 10000:耗时867毫秒 10500:耗时945毫秒 11000:耗时945毫秒 12000:耗时864毫秒 13000:耗时938毫秒 14000:耗时835毫秒 15000:耗时821毫秒 16000:耗时912毫秒 17000:耗时867毫秒 18000:耗时1022毫秒 19000:耗时850毫秒 20000:耗时837毫秒 21000:耗时896毫秒 25000:耗时764毫秒 30000:耗时836毫秒 35000:耗时692毫秒 40000:耗时824毫秒可以看到批处理减少了大量数据库调用的固定成本。