-3

テスト用の内部ストレージ システムに testlink を使用しています。次のクエリは約 80 秒かかり、約 11,000 行のデータを返します。私が改善できることが飛び出すものはありますか?ボトルネックになっているのは、2 つの左外部結合だと思います。

現在の速度:

(11,002 total, Query took 82.8888 sec)

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

SELECT UA.build_id AS build_id, 
   UA.feature_id AS feature_id,
   UA.user_id as user_id,   
   TPTCV.testplan_id AS testplan_id,
   TPTCV.tcversion_id AS tcversion_id,
   TPTCV.platform_id AS platform_id,       
   E.status AS status,
   E.id as execution_id,
   E.tester_id as tester_id
FROM user_assignments UA  
LEFT OUTER JOIN testplan_tcversions TPTCV ON UA.feature_id = TPTCV.id  
LEFT OUTER JOIN executions E ON TPTCV.tcversion_id = E.tcversion_id
AND UA.build_id = E.build_id
AND TPTCV.platform_id = E.platform_id
WHERE UA.type = 1 AND UA.build_id = 10
ORDER BY E.id DESC
4

2 に答える 2

3

外部キー列にインデックスはありますか? それらが必要です。可能であれば、すべての結合列で。また、実行計画を生成して出力を確認します。これは、パフォーマンス分析に非常に役立ちます。わからないことがあればここに投稿してください。

http://dev.mysql.com/doc/refman/5.1/en/execution-plan-information.html

ORDER BY 句も非常に高価になる可能性があります。避けてください。可能であれば、別の場所に並べ替えます。

于 2012-12-11T19:07:13.937 に答える
0

テーブル ブロックを参照する必要なく、インデックス ブロックから完全にクエリを実行できるように、カバリング インデックスを追加することを検討してください。

例えば

... ON user_assignments (build_id, type, feature_id, user_id)

... ON testplan_tcversions (id, testplan_id, tcversion_id, platform_id)

... ON executions (tcversion_id, platform_id, build_id,  status, tester_id, id)

並べ替え操作の必要性をなくすために、ORDER BY なしでクエリを実行することもできます。

于 2012-12-11T20:16:47.823 に答える