Выберите запрос в 2-3 раза быстрее, чем просмотр - PullRequest
3 голосов
/ 23 ноября 2011

Этот запрос выполняется самостоятельно:

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 секунд.

В чем причина и как я могу это сделатьсделать просмотр быстрее?

1 Ответ

6 голосов
/ 23 ноября 2011

Существуют проблемы с производительностью, связанные с обработкой представлений в MySql.Ознакомьтесь с этим ответом здесь .

В основном в MySql используются два разных алгоритма, которые используются для представлений: Merge и Temptable.Слияние обычно работает довольно хорошо, но Temptable может работать довольно плохо.Слияние нельзя использовать, когда представление содержит определенные конструкции, включая GROUP BY, поэтому ваше представление будет использовать алгоритм Temptable.

...