繁体   English   中英

如何在不更改基础表的情况下提高MySQL查询的性能?

[英]How can I improve performance of a MySQL query without changing the underlying tables?

我有一个查询来自第三方产品的数据的应用程序。 因此,我渴望不更改表结构。

有没有一种方法可以纯粹在查询方面提高效率?

我的查询是:

CallsClosed.Query = @"SELECT COALESCE(ti.FIRST_NAME,'Not Assigned') AS 'Technician', COUNT(*) 'Calls_Closed'
FROM WorkOrder_Threaded wot
INNER JOIN WorkOrder wo ON wot.WORKORDERID=wo.WORKORDERID
LEFT JOIN SDUser sdu ON wo.REQUESTERID=sdu.USERID
LEFT JOIN AaaUser aau ON sdu.USERID=aau.USER_ID
LEFT JOIN WorkOrderStates wos ON wo.WORKORDERID=wos.WORKORDERID
LEFT JOIN SDUser td ON wos.OWNERID=td.USERID
LEFT JOIN AaaUser ti ON td.USERID=ti.USER_ID
WHERE (wo.COMPLETEDTIME != 0) AND (wo.COMPLETEDTIME != -1) AND (wo.COMPLETEDTIME IS NOT NULL)
AND wo.COMPLETEDTIME >= (UNIX_TIMESTAMP(TIMESTAMP('" + sdChartRange.From + @"')) * 1000)
AND wot.THD_WOID=wot.WORKORDERID
GROUP BY Technician ORDER BY 'Calls_Closed' DESC";

我已经在上面运行了JetProfiler,看来主要的罪魁祸首是wot表的大小。 (约19k行)

关于我应该从哪里开始加快查询的任何建议? (目前大约需要4秒钟才能运行)

  1. 最小化您必须执行的连接数。
  2. 回应评论,添加索引。
  3. 查看该查询的EXPLAIN QUERY结果。
  4. 如果解决满意,将样本数据发布到小提琴中 ,我来看看。
  • 确保在用于选择和联接的字段上具有索引。
  • 检查不再有效的外键(“悬挂”)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM