Mysql IN 大量ID优化方案


背景

订单表:

订单地址表:保存了订单的地址信息,如发货仓库、发货线路等,是订单表和仓库表(发货线路表)的关联表。订单表和订单地址表是1:1,订单地址表和仓库表(发货线路表)是n:1。

订单标签表:保存了订单与表的关系;订单:标签是m : n

需求

通过仓库、线路或订单标签查询订单

原方案

1、通过仓库(线路)在订单地址表里查出订单Id集合A
2、通过标签在订单标签表里查出订单Id集合B
3、查询订单是通过订单id in 查询

问题

随着数据量增加,in 条件的值不可预估,in条件过多导致的效率缓慢

解决方案

1、订单表冗余仓库id、仓库名称
2、根据标签查询时改造为left join查询

SELECT DISTINCT (o1.id) id, o1.order_no FROM order o1 LEFT JOIN label ON o1.id = label.order_id WHERE o1.deleted = 0 AND o1.warehouse_id = ? AND label.label_id IN (?, ?)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM