Производительность представлений MySql [закрыто]



Если вы идете по пути использования представлений, как вы можете обеспечить хорошую производительность?



или лучше не использовать представления в первую очередь и просто включить эквивалент в ваши инструкции select?

969   6  

6 ответов:

Это Зависит.

это полностью зависит от того, что Вы читаете через просмотре. Но, скорее всего, уменьшая ваши усилия и давая более высокую производительность. Когда инструкция SQL ссылается на неиндексированное представление, анализатор и оптимизатор запросов анализируют источник как инструкции SQL, так и представления, а затем разрешают их в один план выполнения. Существует не один план для инструкции SQL и отдельный план для представления.

представление не компилируется. Его виртуальная таблица состоит из других таблиц. Когда вы создаете его, он не находится где-то на вашем сервере. Базовые запросы, составляющие представление, зависят от того же прироста производительности или изменений оптимизатора запросов. Я никогда не тестировал производительность на представлении против его базового запроса, но я бы предположил, что производительность может немного отличаться. Вы можете повысить производительность индексированного представления, если данные относительно статичны. Это может быть то, что вы думаете, возможно, с точки зрения "составленный."

преимущества вид:

  1. просмотр данных без сохранения данных в объект.
  2. Restict вид таблицы т. е. может скрыть некоторые из столбцов в таблицах.
  3. объединить две или более таблиц и показать его как один объект для пользователя.
  4. Restict доступа к таблице так, что никто не может вставить строки в таблицу.

посмотреть эти полезные ссылки:

  1. производительность представления и SQL-оператор
  2. вид быстрее, чем простой запрос?
  3. Mysql VIEWS vs. PHP query
  4. являются ли представления MySql динамичными и эффективными?
  5. материализованный взгляд против таблиц: что преимущества?
  6. запрашивает представление медленнее, чем выполнение SQL напрямую?
  7. обходной путь для проблем производительности заманчивых представлений
  8. см. повышение производительности с помощью индексированных представлений в SQL Server

Я думаю, что блог Петра Зайцева имеет большинство деталей. Говоря из личного опыта взгляды могут работать хорошо, если вы обычно держите их простыми. У одного из моих клиентов они продолжали наслаивать один вид на другой, и это закончилось кошмаром перфоманса.

обычно я использую представления, чтобы показать другой аспект таблицы. Например, в моей таблице сотрудников покажите мне менеджеров или скройте поле зарплаты от сотрудников, не являющихся HR. Также всегда убедитесь, что вы запускаете объяснение на запрос и представление, чтобы точно понять, что происходит внутри MySQL.

Если вы хотите получить твердое доказательство в своем сценарии, я бы предложил вам проверить. Действительно трудно сказать, что использование представлений всегда является убийцей производительности, а затем снова плохо написанное представление, вероятно, убьет вашу производительность.

Они служат своей цели, но скрытые сложности и неэффективность обычно перевешивают более прямой подход. Однажды я столкнулся с оператором SQL, который объединял два представления и сортировал их результаты. Представления также сортировались, поэтому время выполнения можно было измерить в том, что казалось часами.

вот резюме tl; dr, вы можете найти подробные оценки от Петра Зайцева и в других местах.

представления в MySQL, как правило, плохая идея. На Grooveshark мы считаем их вредными, и всегда их избегать. Если вы будете осторожны, вы можете заставить их работать, но в лучшем случае они являются способом запомнить, как выбрать данные или удержать вас от повторного ввода сложных соединений. В худшем случае они могут вызвать массовую неэффективность, скрыть сложность, вызвать случайные вложенные подзапросы (требующие временные таблицы и ведущие к обмолоту диска) и др.

лучше всего просто избегать их, и держать ваши запросы в коде.

Если мы обсуждаем "если вы используете взгляды, как обеспечить производительность", а не эффект производительности взглядов в целом, я думаю, что это сводится к сдержанности (как в себе).

вы можете попасть в большие неприятности, если вы просто пишете представления, чтобы сделать ваш запрос простым во всех случаях, но не заботьтесь о том, что ваши представления на самом деле полезны с точки зрения производительности. Любой запрос, который вы делаете в конце концов, должен работать в здравом уме (см. пример комментария из этой ссылки @eggyal). Конечно это тавтология, но от этого не менее ценная

вам особенно нужно быть осторожным, чтобы не создавать представления из представлений, просто потому, что это может облегчить создание этого представления.

в конце концов, вам нужно посмотреть на причину, по которой вы используете представления. Каждый раз, когда вы делаете это, чтобы облегчить жизнь в конце программирования, вы можете быть лучше с хранимой процедурой IMHO.

чтобы держать вещи под контролем, вы можете записать, почему у вас есть определенный вид, и решите, почему вы используете его. Для каждого "нового" использования в вашем программировании перепроверьте, действительно ли вам нужно представление, зачем оно вам нужно, и если это все равно даст вам разумный путь выполнения. Продолжайте проверять свое использование, чтобы сохранить его быстрым, и продолжайте проверять, действительно ли вам нужен этот вид.

вещь не упоминается до сих пор, но делает огромную разницу адекватная индексация представлений'источник таблицы.

Как уже упоминалось выше, представления не находятся в вашей БД но восстановить в любое время. Таким образом, все, что делает перестройку проще для БД, повышает производительность представления.

часто представления соединяют данные таким образом, что это очень плохо для хранения (нет нормальной формы), но очень хорошо для дальнейшего использования (выполнение анализа, представление данных пользователю,...) и при этом объединение и агрегирование данных из разных таблиц.

индексируются ли столбцы, на которых выполняются операции, или нет, имеет огромное значение для производительности представления. Если таблицы и их соответствующие столбцы индексируются уже доступ к представлению не заканчивается повторным вычислением индексов снова и снова первый. (с другой стороны, это делается, когда данные обрабатываются в источнике таблицы)

! Индексируйте все столбцы, используемые в предложениях JOINS и GROUP BY в инструкции CREATE VIEW !

Comments

    Ничего не найдено.