因为每个账号,都有权限范围管控。
比如一共有10个仓库,账号T0001打开出库单,他只能看到 他拥有权限范围(只分配了5个仓库)的出库单。
EXPLAIN
SELECT t1.WarehouseId,t1.recno
FROM t_stock_outware t1            
WHERE 1=1
AND t1.WarehouseId IN ('ad21e8e58c76420da5ffaf9c63e0e47d','986d6b47a94945cea59fe7654bf0503c',
'05682ab8f672424aaaf3e497080f3779','bd3ce816e4a04b448c5b939bf29c0181',
'0e27fcaa84d94c298c11209b5c50ba56','be9ca229bfba4bf98137697599c7db1d')
ORDER BY t1.recno
LIMIT 0,800WarehouseId,recno  建了索引执行计划:
查询是走了索引,但由于USING filesort   ,导致查询很慢。(去掉order by 速度很快)
如果是用 where  warehouseid='XXX'  order by recno  这就不会有 USING filesort (速度也很快)
但用 where warehouseid  in ('XXX','XXXX') order by recno  ,就有会USING filesort
请教有没有什么好的方法解决。

解决方案 »

  1.   

    可能有人会说,仓库id, 应该用int 类型。 会有点提升,但差别不大。
    主要还是  USING filesort  引起。
    如果索引的顺序 (WarehouseId,recno )  改成  (recno, WarehouseId ), 是可以解决这个问题,
    但会 导致 where  warehouseid='XXX'  order by recno   不会走索引,变成ALL 查询。
      

  2.   

    可以试试把 in 变成 union all where  warehouseid='XXX'
      

  3.   

    以文本方式贴出(不要贴图!)
    explain select ....

    show index from 以供分析