mysql 子查询计算太慢什么优化?

SELECTe.*,(SELECTNAMEFROMdictWHEREid=e.areaId)asareaName,(SELECTSUM(money)FROMenginee... SELECT
e.*,
(SELECT NAME FROM dict WHERE id = e.areaId) as areaName,
(SELECT SUM(money) FROM engineering_project WHERE engineeringId =e.id) AS sumProjectMoney,
(IFNULL((SELECT SUM(actualMoney) FROM income WHERE engineeringId=e.id),0) +IFNULL((SELECT SUM(discount) FROM income WHERE engineeringId=e.id),0) +IFNULL((SELECT SUM(procedureMoney) FROM income WHERE engineeringId=e.id),0) ) AS accountPaid, ##已付款金额
IFNULL((SELECT SUM(procedureMoney) FROM income WHERE engineeringId=e.id),0) AS procedureMoneyS, ##手续费
IFNULL((SELECT SUM(discount) FROM income WHERE engineeringId=e.id),0) AS discountS, ##折扣
IFNULL((SELECT SUM(actualMoney) FROM income WHERE engineeringId=e.id),0) AS actualMoneyS, ##实收
(SELECT SUM(money) FROM engineering_project WHERE engineeringId =e.id)-(IFNULL((SELECT SUM(actualMoney) FROM income WHERE engineeringId=e.id),0) +IFNULL((SELECT SUM(discount) FROM income WHERE engineeringId=e.id),0) +IFNULL((SELECT SUM(procedureMoney) FROM income WHERE engineeringId=e.id),0) ) AS debtMoney, ##欠付款金额
IFNULL((SELECT SUM(actualMoney) FROM income WHERE engineeringId=e.id),0) AS paymentAll ##所有付款
FROM
engineering e
展开
 我来答
jaramy1111
2017-03-24 · TA获得超过348个赞
知道小有建树答主
回答量:382
采纳率:100%
帮助的人:93.8万
展开全部
如果列比较多的话,建议别用*,
你这种最适合with as这种临时表 ,
使用子查询的方法表被扫描了多次,而使用WITH Clause方法,表仅被扫描一次。这样可以大大的提高数据分析和查询的效率。
VB编程解放双手
2017-03-24 · 个人VB爱好者专注vb编程_时效软件
VB编程解放双手
采纳数:1204 获赞数:2391

向TA提问 私信TA
展开全部
建议建立临时表!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱可生云数据库
2020-11-13 · MySQL开源数据库领先者
爱可生云数据库
爱可生,金融级开源数据库和数据云服务整体解决方案提供商;优秀的开源数据库技术,企业级数据处理技术整体解决方案提供商;私有云数据库云服务市场整体解决方案提供商。
向TA提问
展开全部

子查询优化策略

对于不同类型的子查询,优化器会选择不同的策略。

1. 对于 IN、=ANY 子查询,优化器有如下策略选择:

  • semijoin

  • Materialization

  • exists

  • 2. 对于 NOT IN、<>ALL 子查询,优化器有如下策略选择:

  • Materialization

  • exists

  • 3. 对于 derived 派生表,优化器有如下策略选择:

  • derived_merge,将派生表合并到外部查询中(5.7 引入 );

  • 将派生表物化为内部临时表,再用于外部查询。

  • 注意:update 和 delete 语句中子查询不能使用 semijoin、materialization 优化策略

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式