• 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 (?, ?)
  • 相关阅读:
    Linux之wget命令
    Markdown语法
    Windows实时预览markdown
    Python基础教程,Python入门教程(非常详细)
    【转载】UNICODE与ASCII的区别
    Python之虚拟环境
    Linux文件系统管理
    Linux权限管理
    linux用户和用户组管理
    linux 软件安装
  • 原文地址:https://www.cnblogs.com/zhangxianming/p/15336589.html
Copyright © 2020-2023  润新知