选择(inv\u total-isc\u total)作为利润来源(
选择
合计(库存净重库存单价)为isc合计,
金额(如(i.“$ex\u gst.”ex\u gst='是')
then(inv.net\u weight(i.final='y'且i.currency\u id不为空时的情况)then(ind.final\u单价cr.currency\u值)
当(i.final='y'且i.currency\u id为空)时,则ind.final\u单价
当(i.final<>'y'和i.currency\u id不为空)时,则(ind.unit\u pricecr.currency\u value)
当(i.final<>'y'和i.currency\u id为空)时,则ind.unit\u price else ind.unit\u price end)1.06)
else(inv.net\u weight(i.final='y'且i.currency\u id不为空时的情况)然后(ind.final\u单价cr.currency\u值)
当(i.final='y'且i.currency\u id为空)时,则ind.final\u单价
当(i.final<>'y'和i.currency\u id不为空)时,则(ind.unit\u pricecr.currency\u value)
当(i.final<>'y'和i.currency\u id为空)时,则指示单价
其他工业单位(单价结束)
)结束
)作为发票合计
来自“$prefix\u qry.”库存发票
内部联接“..$prefix\u qry.”osc\u detail osc\u do on osc\u do.inventory\u id=inv.inventory\u id
inner join product p on inv.product\u id=p.product\u id
左连接“..$prefix\u qry.”isc isc on inv.isc\u batch\u no=isc.isc\u batch\u no
isc.supplier\u id=s.supplier\u id上的内部连接供应商
内部联接“..$prefix\u qry.”inv.osc\u id=i.osc\u id上的发票i
内部联接“..$prefix\u qry.”i.invoice\u id=ind.invoice\u id和ind.product\u id=p.product\u id上的invoice\u detail ind
left join currency cr on i.currency\u id=cr.currency\u id
其中inv.osc\u id!=''
库存类型='确认'
i.cancel\u by为空
和s.supplier\u id='“$supp\u id.”
月份(即交货日期)=“$月”
年份(即交货日期)=“.”年“)作为
1条答案
按热度按时间bq9c1y661#
为了使mysql能够有效地利用索引上的范围扫描,将date\u of \u delivery作为前导列,假设$year表示有效的年份,而$month是介于1和12之间的值,那么请更改以下内容:
对这样的事情:
世界的“外在”
LEFT JOIN
至isc
被后面的内部连接取反s
. 也就是说,替换LEFT JOIN
与INNER JOIN
.确保有合适的索引可用,并且正在使用。
explain输出将显示执行计划。
除此之外,我们还需要看到explain输出。这将为我们提供一个关于哪些索引可用、表统计等等的线索。为了真正深入研究,我们需要知道查询中涉及的所有表的所有索引的定义,以及 predicate 中涉及的列的数据类型。
如果内联视图查询返回一行,则派生表的开销可以忽略不计。
此查询应返回与原始内联视图等效的结果。
选择列表中列用法的摘要
predicate 中的列用法摘要
这些表可能较小,并且已经将这些列作为主键
我们应该考虑是否有必要包括
product
(p
)以及supplier
(s
)查询中的表。如果使用的列(如上所示)用于p
以及s
是主键或唯一键,如果强制执行这些外键约束:然后连接到
p
以及s
不会影响结果。也就是说,这些表可以从查询中删除。覆盖索引的第一个切入点可能有助于优化器生成有效的执行计划。。。