使用sql in数据量较大时的处理方法

参考:

https://www.zhihu.com/question/578354887/answer/2846786420
http://blog.snjl.site/archives/shi-yong-sql-inshu-ju-liang-jiao-da-shi-de-chu-li-fang-fa

数据量较小的情况

采用in (a,b,c,d,…)的方式。

数据量较大的情况

采用临时表,把IN的变量放进一个临时表中,然后改写为子查询方式

这种方法稍微麻烦一些。有可能临时表数据不可见,调试不方便。但是该方式优点很明显。

首先是不会因为参数很多导致SQL很长,提升了SQL的易读性;

其次是无论多少参数,SQL语句完全一样,而对数据库来说,同一个SQL,就可以复用很多东西,比如执行计划。这样有利于提升SQL的性能。

一个简单的临时表:

DROP TABLE IF EXISTS `temp_table`;
CREATE TABLE `temp_table`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
   `proc_id` int(11) NOT NULL,
  `int_value` int(11) NULL DEFAULT NULL,
  `string_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

预设了int和string两种类型,这样可以通过

select xxx from table where id in (select int_value from temp_table where proc_id = #{prod_id})

进行查询。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极北之南。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值