Обычно это так называемые представления.Например:
CREATE VIEW vMyLongQuery
AS
SELECT a, b, c FROM (LONG QUERY) X WHERE ...
На которые можно ссылаться следующим образом:
SELECT a, b, c FROM vMyLongQuery
См. http://dev.mysql.com/doc/refman/5.0/en/create-view.html для получения дополнительной информации о синтаксисе.
Что касается производительности, то лучшая производительность будет примерно такой же, как и сейчас, а в худшем случае это убьет ваше приложение.Это зависит от того, что вы делаете с представлениями и как MySQL обрабатывает их.
MySQL реализует представления двумя способами merge
и temptable
.Параметр merge
в точности соответствует тому, что вы делаете сейчас, ваше представление объединяется с вашим запросом как подзапрос.С помощью temptable он фактически помещает все данные в temptable, а затем select/join
для этого temptable.Вы также теряете преимущества индекса, когда данные присоединяются к искомому.
Как правило, план запросов merge
не поддерживает ни одного из следующих представлений.
- Агрегатные функции (SUM (), MIN (), MAX (), COUNT () и т. Д.)
- DISTINCT
- GROUP BY
- HAVING
- LIMIT
- UNION или UNION ALL
- Подзапрос в списке выбора
- Ссылка на литералы без базовой таблицы
Так что если ваш подзапросиспользуя их, вы, скорее всего, ухудшите производительность.
Кроме того, внимательно прислушайтесь к совету OMG Ponies, представление НЕ совпадает с базовым классом.Представления имеют свое место в БД, но могут легко использоваться неправильно.Когда инженер приходит к базе данных из OO-фона, представления кажутся удобным способом продвижения наследования и возможности повторного использования кода.Часто люди в конечном итоге оказываются в положении, когда у них есть вложенные представления, соединенные с вложенными представлениями вложенных представлений.SQL обрабатывает вложенные представления, по сути беря определение каждого отдельного представления и превращая его в чудовище запроса, который заставит вашего администратора базы данных плакать.
Кроме того, вы следовали отличной практике в своем примере, и я призываю вас продолжитьэтот.Вы указали все свои столбцы индивидуально, никогда не используйте SELECT *, чтобы указать результаты вашего просмотра.Это, в конце концов, испортит ваш день.