【笔记】记一次mysql IN 大量ID优化方案

背景

基于某些业务开发过程中,会遇到这样的查询语句:SELECT * FROM table where id in(1, 2, 3), 但是当IN里面的数据量非常大的时候,有些数据库会对IN 的数据量有大小限制,比如Oracel大小限制是1000,因此如果能有一种替代IN 大量数据,并且性能还不错的方案就好了。

实战

1、使用IN方案查询结果,查询时间为:0.078s,总数据量60多万。

select * from designmaterial ds where ds.materialid in(
“00010448”,
“00010450”,
“00010454”,
“00010455”,
“00010457”,
“00010460”,
“00010466”,
“00010470”,
“00010474”,
“00010475”,
“00010477”,
“00010484”,
“00010487”,
“00010489”,
“00010491”,
“00010492”,
“00010493”,
“00011018”,
“00011019”,
“00011020”,
“00011071”,
“00011072”,
“00011073”)

2、改用替代方案,查询时间为:0.053S左右,总数据量60多万

SELECT *
FROM (
SELECT “00010448” cid UNION ALL
SELECT “00010450” UNION ALL
SELECT “00010454” UNION ALL
SELECT “00010455” UNION ALL
SELECT “00010457” UNION ALL
SELECT “00010460” UNION ALL
SELECT “00010466” UNION ALL
SELECT “00010470” UNION ALL
SELECT “00010474” UNION ALL
SELECT “00010475” UNION ALL
SELECT “00010477” UNION ALL
SELECT “00010484” UNION ALL
SELECT “00010487” UNION ALL
SELECT “00010489” UNION ALL
SELECT “00010491” UNION ALL
SELECT “00010492” UNION ALL
SELECT “00010493” UNION ALL
SELECT “00011018” UNION ALL
SELECT “00011019” UNION ALL
SELECT “00011020” UNION ALL
SELECT “00011071” UNION ALL
SELECT “00011072” UNION ALL
SELECT “00011073”
) AS tmp,designmaterial t
WHERE tmp.cid = t.materialid;

总结

经过mysql数据库大量测试结果替代方案比IN语句快了不少,特别是数据量比较大的时候,所以以后如果遇到IN查询过程可以使用该替代方案。

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值