0

サードパーティ製品からデータを照会するアプリケーションがあります。そのため、テーブル構造を変更したくありません。

純粋にクエリ側で効率を向上させる方法はありますか?

私のクエリは次のとおりです。

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 秒かかります)

4

2 に答える 2

0
  1. 必要な結合の数を最小限に抑えます。
  2. コメントを反映して、インデックスを追加します。
  3. EXPLAIN QUERYそのクエリの結果を見てください。
  4. 満足のいく解決が得られた場合は、サンプル データをフィドルに投稿してください。
于 2013-01-24T15:40:59.613 に答える