Подтвердить что ты не робот

MySQL: просмотры и хранимые процедуры

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

С точки зрения выбора данных, особенно при рассмотрении выбора, который по существу является дезадаптацией (объединением) и агрегатом (avg или max, подзапросами w/counts и т.д.), выбор данных, что является правильным выбором в MySQL 5.x? Вид? Или хранимая процедура?

Представления Мне удобно - вы знаете, как должен выглядеть ваш запрос SELECT, поэтому вы просто создаете его, удостоверяете, что он проиндексирован и что-то еще, а затем просто выполните CREATE VIEW [View] AS SELECT [...]. Затем в моем приложении я рассматриваю представление как таблицу только для чтения - он представляет собой ненормированную версию моих нормализованных данных.

Каковы недостатки здесь - если они есть? И что изменилось бы (прибыль или убытки), если бы я переместил этот точный оператор SELECT в хранимую процедуру?

Я надеюсь найти какую-нибудь полезную информацию "под капотом", которую трудно найти во время поиска в этой теме, но я действительно приветствую все комментарии и ответы.

4b9b3361

Ответ 1

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

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

Ответ 2

Я использую представления для де-нормализации или форматирования вывода и хранимых процедур для фильтрации и обработки данных (вещи, требующие ввода параметров) или итерации (курсоры).

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

Ответ 3

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

Представления, с другой стороны, могут скрыть сложные права на sql/access и представить измененный вид схемы.

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

Ответ 4

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

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

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