Задавайте вопросы, мы ответим
Вы не зашли.
Есть View1 на основе запроса SELECT t1.id ....
Запрос полностью не привожу, так как сложный и, думаю, проблема не в самом запросе.
Данный запрос с фильтром WHERE t1.id = N1 выполняется за 10 мс.
View на основе данного запроса SELECT * FROM View1 WHERE id = N1 выполняется 1,5 сек.
Не могу понять почему такая разница?
Есть идеи?
Неактивен
вероятно View1 записывается во временную таблицу и уже по ней выполняется поиск.
http://sqlinfo.ru/articles/info/9.html написал:
Существует два алгоритма, используемых MySQL при обращении к представлению: MERGE и TEMPTABLE.
В случае алгоритма MERGE, MySQL при обращении к представлению добавляет в использующийся оператор соответствующие части из определения представления и выполняет получившийся оператор.
В случае алгоритма TEMPTABLE, MySQL заносит содержимое представления во временную таблицу, над которой затем выполняется оператор обращенный к представлению.
Неактивен
Подозреваю, что именно это, потому что план запроса к View дает полный список строк.
Как этого можно избежать? Не хочется использовать сложный запрос в других запросах.
Неактивен
1. если в определении представления указано TALGORITHM = TEMPTABLE, то просто изменить на UNDEFINED или MERGE
2. если запрос сложный, и MySQL выбирает TEMPTABLE, то никак.
к сожалению, view и производительность не очень сочетаются.
Неактивен
1. TALGORITHM = TEMPTABLE нет
2.
Спасибо!
Неактивен