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

时间:2013-01-24 15:34:59

标签: mysql performance

我有一个查询第三方产品数据的应用程序。因此,我不想改变表格结构。

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

我的查询是:

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表的大小。 (c.19k行)

有关我应该从何处开始加快查询速度的建议? (目前需要大约4秒才能运行)

2 个答案:

答案 0 :(得分:0)

  1. 尽量减少您必须执行的联接次数。
  2. 回应评论,添加索引。
  3. 查看该查询的EXPLAIN QUERY结果。
  4. 如果解决得很满意,请在fiddle中发布样本数据,我会看看。

答案 1 :(得分:0)

  • 确保您在用于选择和加入的字段上有索引。
  • 检查不再有效的外键('悬空')。