3

このクエリは単独で実行されます。

SELECT 
    -- lots of columns 
FROM 
    table1 t1
    LEFT JOIN table2 t2
        ON t2.[userid] = t1.[userid]
    LEFT JOIN table3 t3
        ON t1.[orderid] = t3.[orderid]
    LEFT JOIN table4 t4
        ON t4.[orderitemlicenseid] = t3.[orderitemlicenseid]
    LEFT JOIN table5 t5
        ON t1.[orderid] = t5.[orderid]
    LEFT JOIN table6 t6
        ON t5.[transactionid] = t6.[transactionid]
    LEFT JOIN table7 t7
        ON t7.[transactionid] = t5.[transactionid]
    LEFT JOIN table8 t8
        ON t8.[voucherid] = t7.[voucherid]
    LEFT JOIN table9 t9
        ON t8.[voucherid] = t9.[voucherid]
    LEFT JOIN table10 t10
        ON t10.[vouchergroupid] = t9.[vouchergroupid]
        AND t10.[territoryid] = t2.[territoryid]
    LEFT JOIN table11 t11
        ON t11.[voucherid] = t8.[voucherid]
    LEFT JOIN table12 t12
        ON t12.[orderid] = t1.[orderid]
GROUP BY 
    t5.[transactionid]

完了するまでに約 2.5 秒かかります。ビューに保存して次のように実行すると:

SELECT * FROM viewName;

終了まで7秒かかります。

その理由と、ビューを高速化するにはどうすればよいですか?

4

1 に答える 1

6

MySql でのビューの処理方法には、パフォーマンス上の問題があります。こちらの回答をご覧ください。

基本的に、MySql のビューに使用されるアルゴリズムには、Merge と Temptable の 2 つがあります。通常、Merge のパフォーマンスは非常に良好ですが、Temptable のパフォーマンスは非常に低い場合があります。ビューに を含む特定の構造が含まれている場合、マージは使用できないGROUP BYため、ビューは Temptable アルゴリズムを使用します。

于 2011-11-23T17:45:00.487 に答える