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